【问题标题】:Finding appropriate container type [duplicate]寻找合适的容器类型[重复]
【发布时间】:2013-08-23 18:41:42
【问题描述】:

我需要一个具有键值访问权限的容器(如地图或未排序的地图),但也可以通过某种方式进行排序。
有人可以推荐这样的容器吗?
示例:
我需要在其中存储例如 Employer 类值作为值和一些字符串 id 作为键,这不等于雇主的名字。
所以我希望容器可以按雇主名称排序。

【问题讨论】:

  • 你的意思是它必须是可排序的构造之后?
  • 好吧,std::map “以某种方式”排序的(即根据其键)。如果这不是您想要的,请让您的问题更清楚。
  • 我提供了一些例子...
  • @syam 我知道地图是按键排序的,但这种排序不适合我。
  • 你看过boost多索引容器吗? boost.org/doc/libs/1_54_0/libs/multi_index/doc/index.html。可能是您正在寻找的。​​span>

标签: c++ qt stl


【解决方案1】:

我建议使用简单的std::map,例如

typedef std::map<std::string, Employer> EmployerMap;
EmployerMap employers;

...然后使用一些带有指向地图的迭代器的序列容器(例如std::vector)。然后根据需要对序列容器进行排序:

// Build vector of iterators into map
std::vector<EmployerMap::iterator> v;
v.reserve( employers.size() );
for ( EmployerMap::iterator it, it != employers.end(); ++it ) {
  v.push_back( it );
}

// Sort vector by names of employers.
std::sort( v.begin(), v.end(),
           [](const EmployerMap::iterator &a, const EmployerMap::iterator &b) -> bool {
               return a->name < b->name;
           }
         );

【讨论】:

  • 好主意。谢谢你的建议。
猜你喜欢
  • 1970-01-01
  • 2013-10-27
  • 2017-10-31
  • 2016-12-13
  • 2010-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多