从文件读取到具有键作为整数和相应值的映射的映射

时间:2018-06-06 10:16:57

标签: c++ c++11

我在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);
}

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

1 个答案:

答案 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';
}