Как инициализировать std :: set & lt; std :: string & gt; правильно?

Пожалуйста, помогите мне, я пытался сделать это в течение последних двух-трех часов, и все безуспешно. У меня есть ряд строк, поступающих в форме input.txt в формате

string1 string2
string3 string4
etc.

что я хочу положить в std :: set, который изначально пуст. Я хочу нумеровать строки по мере их поступления и помещать их в набор, чтобы отслеживать дубликаты, чтобы я не нумеровал их снова. Я пытаюсь инициализировать std::set<std::string> inGraph но не могу заставить его работать. Я пытался инициализировать std::set<std::string> inGraph(0, tot_lines); где от 0 до tot_lines — диапазон количества строк, которые я ожидаю получить от ввода. Я пытался инициализировать все с пустым перемешиванием, как: std::set<std::string> inGraph(tot_lines, ""); и это не удалось. Вот что у меня сейчас:

struct StringInt {
std::string name;  // associate name and number for each input string
int number;
};

int main(int argc, char* argv[]) {
int tot_lines = 100;
int icv1, icv2;
std::string vert1, vert2;
std::set<std::string> inGraph();  // this is the set I want to initialize
std::set<std::string>::iterator sit;
std::vector<StringInt> stringInts(tot_lines*2);
StringInt* si;

std::ifstream myfile2 ("input.txt");
if (myfile2.is_open()) {
while(myfile2 >> vert1 >> vert2) {
// read in input, put it in vars below
myfile2 >> vert1 >> vert2;

if (inGraph.find(vert1) != inGraph.end()) {
icv1 = i++;
si->name = vert1;
si->number = icv1;
inGraph.insert(vert1);
stringInts.push_back(*si);
}
else {
icv1 = si->number;
}
if (inGraph.find(vert2) != inGraph.end()) {
icv2 = i++;
si->name = vert1;
si->number = icv2;
inGraph.insert(vert2);
stringInts.push_back(*si);
}
else {
icv2 = si->number;
}
}

Я получаю ошибку: left of '.find' must have class/struct/union Можете ли вы помочь мне выяснить, как инициализировать std::set<std::string> inGraph чтобы я мог нумеровать строки?

0

Решение

Сообщение об ошибке, потому что вы являетесь жертвой Most Vexing Parse.

std::set<std::string> inGraph();

Это объявление функции, тип возвращаемого значения std::set<std::string>, Просто удалите () после inGraph сделать это объявлением объекта.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]