在地图中插入/读取一组

时间:2019-01-23 12:19:46

标签: c++ dictionary stl set composition

我想使用var lineString = new H.geo.LineString(); routeShape.forEach(function(point) { var parts = point[0].split(','); lineString.pushLatLngAlt(parts[0], parts[1]); }); polyline = new H.map.Polyline(lineString, { style: { lineWidth: 4, strokeColor: 'rgba(0, 128, 255, 0.7)' } }); map.addObject(polyline); map.setViewBounds(polyline.getBounds(), true); “管理”航班。 map<string, set<string>>键代表航班号,而string值代表在航班上注册的人的姓名。就我而言,我从一个简单的文本文件中读取数据,例如:

set<string>

为了找到同一班机的人。

我知道插入地图的一种基本方法是

123 jhonny
132 harry
123 bill
145 herry
132 jarry

并使用迭代器读取容器。

但是我该如何插入集合的组成并将其读取到地图中?

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

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

但是它给出了错误。

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

谢谢。

1 个答案:

答案 0 :(得分:3)

就像对待任何常规集一样对待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;
}