CW *_* II 1 c++ containers stl
我使用列表将城市放入旅行中.然后我遍历列表以显示行程路线.我想通过名称而不是旅行订单访问城市.所以,我认为我可以使用地图而不是列表,但密钥决定了顺序.我仍然想控制序列的顺序,但能够通过键访问条目.
这些功能可以结合起来吗?有没有一些标准的方法来解决这个问题?
#include <list>
#include <iostream>
struct City{
City(std::string a_n, int a_d):name(a_n), duration(a_d){}
std::string name;
int duration;
};
int main(){
std::list<City*> trip;
trip.push_back(new City("NY", 5));
trip.push_back(new City("LA", 2));
for (std::list<City*>::iterator ii=trip.begin(); ii!=trip.end(); ++ii)
std::cout << (*ii)->name << " for " << (*ii)->duration << " days." <<std::endl;
}
Run Code Online (Sandbox Code Playgroud)
通常,您需要撰写多个列表和地图.常见的方法是从列表中的指针存储指向城市查找映射中的城市的指针.或者你可以使用像Boost.MultiIndex这样的类来做我想要的更干净的东西.它也可以更好地扩展,如果你想添加新的索引,锅炉板代码就会少得多.它通常也更节省空间和时间
typedef multi_index_container<
City,
indexed_by<
sequenced<>, //gives you a list like interface
ordered_unique<City, std::string, &City::name> //gives you a lookup by name like map
>
> city_set;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
205 次 |
最近记录: |