gpt4 book ai didi

c++ - 将集合插入/读取到 map 中

转载 作者:搜寻专家 更新时间:2023-10-31 01:26:58 26 4
gpt4 key购买 nike

我想“管理”航类,使用 map<string, set<string>> . string键代表航类号,而 set<string>值代表在航类注册的人员姓名。就我而言,我从一个简单的文本文件中读取数据,例如:

123 jhonny
132 harry
123 bill
145 herry
132 jarry

为了找到同一航类的人。

我知道插入 map 的基本方法是

map<string, string> m;
m["hi"] = test;

并使用迭代器读取容器。

但是我怎样才能将集合的组成插入和读取到 map 中呢?

我尝试使用双迭代器,或者使用 while 和迭代器从文件中获取数据:

string pers, volo;
while (wf >> volo >> pers) {
m[volo] = pers;
}

但它给出了错误。

我是 STL 的新手,我已经阅读了一些文件、指南和其他内容来学习集合和 map ,但我还没有找到任何关于容器组合的信息(比如我所描述的那个)。我怎样才能做到这一点?也许在 map 和 set 上使用双迭代器?

谢谢。

最佳答案

请善待您的 m[volo]像任何一种常规设置。你的set一旦您使用 std::map::operator[] 访问它的值,将被默认构造.这允许您直接使用任何 set的成员函数。要向集合添加值,请使用 std::set::insert .

使用标准输入/输出,您的代码可能如下所示:

string a, b;
while (cin >> a >> b) {
m[a].insert(b);
cout << m[a].size() << endl;
}

如果你想输出你的集合,一个方便的方法是在 operator<< 上定义一个重载。 .下面定义了一个模板任意集合。

template<typename T>
std::ostream& operator<<(std::ostream& os, const std::set<T>& s)
{
for (auto& el : s)
os << el << ' ';
return os;
}

这使您可以无误地执行以下操作。

for (auto it = m.begin(); it != m.end(); ++it)
{
cout << it->first; // a string
cout << ' ';
cout << it->second; // a set
cout << endl;
}

关于c++ - 将集合插入/读取到 map 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54327128/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com