从文件读取到映射中,该映射将键作为整数,并将相应的值设置为设置



我在 txt 文件中有以下形式的条目:

329881 100000005 100000125 100000145 
390876 100000667 100000745 100000288 100000395 100000392
289456 100034560 100000145 100000286 100000245

。 ...

我想读取这个 txt 文件,逐个结构地读取到具有 2 个字段的映射中:

struct keyvaluestruct
{
uint64_t _key;
unordered_set<uint64_t> _set;
};

其中第一个结构的键应329881,集合应100000005100000125100000145。同样,对于第二个结构,键应该是390876的,集合中的值应该是100000667100000745100000288100000395100000392的。然后将这些结构插入到地图中

map < uint64_t,unordered_set< uint64_t>> _mapstructs;

我遵循以下方法:

keyvaluestruct s1;
ifstream ifile('file.txt')
while(!ifile.eof())
{
ifile>>key>>vset;
s1._key = key;
s1._set = vset;
_mapstructs.insert(s1._key,s1._set);
}

任何人都可以帮助我纠正这种方法或建议替代方法吗?

类似下面的操作可以:

#include <unordered_set>
#include <iostream>
#include <sstream>
#include <cstdint>
struct Data
{
uint64_t key;
std::unordered_set<uint64_t> set;
friend std::istream& operator>>(std::istream& s, Data& data) {
std::string line;
getline(s, line);
std::istringstream s2(line);
s2 >> data.key;
data.set.clear();
for(uint64_t element; s2 >> element;)
data.set.insert(element);
return s;
}
friend std::ostream& operator<<(std::ostream& s, Data const& data) {
s << data.key;
for(auto const& element : data.set)
s << ' ' << element;
return s;
}
};
int main() {
std::istringstream input("329881 100000005 100000125 100000145n"
"390876 100000667 100000745 100000288 100000395 100000392n"
"289456 100034560 100000145 100000286 100000245n");
Data data[3];
for(auto& d : data)
input >> d;
for(auto& d : data)
std::cout << d << 'n';
}

最新更新