以下是我的代码,我正在从文件中读取数据,并且一次将数据一行并尝试将其插入到地图中。我不允许使用多个地图。
using namespace std;
int main( int argc, char* argv[]){
char* file = argv[1]; // saves name of file
ifstream infile ( file ); // Imported file
map <string, set < pair < string, string > > > m;
string data;
string key;
string year;
string count;
if(!infile){
cout << "Error opening file" << endl;
return -1;
}
while (!infile.eof() ){
getline(infile, data);
for ( unsigned int i = 0; i < data.length(); i++ ){
while ( data[i] != '\t'){
key += data[i];
i++;
}
i++;
while ( data[i] != '\t'){
year += data[i];
i++;
}
i++;
while ( data[i] != '\t'){
count += data[i];
i++;
}
cout << key << endl;
cout << year << endl;
cout << count << endl;
cout << endl;
break;
}
m.insert(key, set < pair < string, string > > ( year, count) );
key.clear();
year.clear();
count.clear();
}
}
答案 0 :(得分:0)
您在这里定义一个带有键的值和一组对的值:
map <string, set < pair < string, string > > > m;
这真的是你想要的吗?
如果要将一对字符串与一个键相关联,请将您的地图简单地定义为:
map <string, pair < string, string > > m;
要插入新值,您可以执行以下操作:
m[key] = make_pair (year, count);
如果在另一方面,您希望将几个不同的对关联到同一个关键字,那么您可以使用 multimap
P.S。:它与您的问题没有直接关系,但从不在C ++中使用eof。请改用while (getline(infile, data) )
。
答案 1 :(得分:0)
问题是您是在地图中插入,但是要插入地图中键键中的集合
尝试更改
m.insert(key, set < pair < string, string > > ( year, count) );
使用:
m[key].insert(make_pair(year, count));
或(更强大):
map <string, set < pair < string, string > > >::iterator it = m.find(key)
if (key == m.end) {
set <pair<string,string>> s;
s.insert(make_pair(year, count));
m.insert(make_pair(key, s));
} else {
it->second.insert(make_pair(year, count));
}