将集合插入/读取到地图中
Insert/read a set into a map
我想使用 map<string, set<string>>
来"管理"航班。string
键表示航班号,而set<string>
值表示在航班上注册的人员姓名。就我而言,我从一个简单的文本文件中读取数据,例如:
123 jhonny
132 harry
123 bill
145 herry
132 jarry
为了找到同一航班上的人。
我知道插入地图的基本方法是
map<string, string> m;
m["hi"] = test;
并使用迭代器读取容器。
但是,如何将集合的组成插入并读取到地图中呢?
我尝试使用双迭代器,或使用while和迭代器从文件中获取数据:
string pers, volo;
while (wf >> volo >> pers) {
m[volo] = pers;
}
但它给出了错误。
我是STL的新手,我已经阅读了一些文件,指南和其他文件来学习集合和映射,但我没有找到任何关于容器组合的信息(例如我描述的那个)。我该怎么做?也许在地图上和片场都有双重迭代器?
谢谢。
就像对待
任何类型的常规集合一样对待您的m[volo]
。一旦您使用 std::map::operator[]
访问其值,您的set
将被默认构造。这允许您直接使用 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;
}
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- 使用新行和不使用新行读取文件
- 读取文件并输入到矢量中
- 为什么不;名字在地图上是按顺序排列的吗
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- C++将文件内容读取到地图中
- C++,如何从文件中读取数据并插入容器:地图
- 从文件中读取数据并插入到地图C++中
- 如何从文件中读取输入并在C++中配对到地图中
- 将集合插入/读取到地图中
- 在 const 函数中从地图中未经选中读取
- 使用 valgrind 的地图中的读取大小错误无效
- 如何在使用 Boost C++ 编写的 php Web 应用程序中读取地图(在共享区域中)
- 如果我在键不存在的情况下读取地图的值,会发生什么情况?
- 房间地图游戏程序从文件读取
- 在yaml-cpp中读取地图
- 插入和读取值从3D地图
- std::在单独的线程中插入时读取地图