我在txt文件中有以下形式的条目:
329881 100000005 100000125 100000145
390876 100000667 100000745 100000288 100000395 100000392
289456 100034560 100000145 100000286 100000245
... ...
我想读取这个txt文件,按结构按结构形成一个有两个字段的地图:
struct keyvaluestruct
{
uint64_t _key;
unordered_set<uint64_t> _set;
};
第一个结构的键应为329881
,该集应为100000005
100000125
100000145
。同样,对于第二个结构,密钥应为390876
,并且集合中的值应为100000667
100000745
100000288
100000395
100000392
。然后将这些结构插入地图
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);
}
任何人都可以帮助我纠正这种方法或提出替代方法吗?
答案 0 :(得分:1)
如下所示:
#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 100000145\n"
"390876 100000667 100000745 100000288 100000395 100000392\n"
"289456 100034560 100000145 100000286 100000245\n");
Data data[3];
for(auto& d : data)
input >> d;
for(auto& d : data)
std::cout << d << '\n';
}