繁体   English   中英

如何按一个值属性对海图进行排序?

[英]How to sort massive map by one value property?

我有一个map<std::string, myStruct>我想知道如何通过myStruct.order的int属性对map中的项目进行排序,以及是否有2个或更多myStruct命令是相同的抛出键(字符串)的列表,从而使地图无法排序靠myStruct的那个领域? 在C ++ 03中是否有任何奇特的方法(可能是通过Boost实现的)?

boost在MultiIndex中具有完整(且复杂)的功能,但是如果我理解您的要求,那么在这种情况下就太过分了。 一个相当简单的方法是建立指向myStruct和sort的指针列表。 然后,您可以轻松检查重复的键(这些键成为相邻键)。

sort应该使用类型less<const myStruct*>的函子,即

bool compare_orders(const myStruct* a, const myStruct* b) { return a->order < b->order; }

您不能使用std::map做到这一点- pairfirst用于比较(称为key )。 在您的情况下, std::string

您可以使用std::set< std::pair< std::string, MyStruct > > ,然后对两个std::pair< std::string, MyStruct > -s实施operator<

或者,如果可能/允许/合适/等,则可以更改std::map的定义。 这实际上取决于您要尝试执行的操作以及您被允许执行的操作。

或其他一些容器(保持插入时元素的顺序,例如std::liststd::vector等),然后使用std::sort或容器的sort方法(如果存在)。

将地图“分类”有什么意思? 当然,可以在内部将地图组织成BST或某种形式,以加快访问速度,但是从概念上讲,地图的元素没有特定的顺序。

除此之外,您还可以为键提供一种排序方法(因为即使您以某种特定的方式组织地图,也可以通过键的顺序而不是值的顺序来进行排序),但不能使用map的第三个模板参数。

我同意其他答案,但不清楚为什么需要对地图进行排序。 但是您可以使用双向映射来让您同时将myStruct和string作为键进行查看。

有一个助推器:

http://www.boost.org/doc/libs/1_48_0/libs/bimap/doc/html/index.html

这里有一个例子

http://www.boost.org/doc/libs/1_48_0/libs/bimap/doc/html/boost_bimap/examples/simple_bimap.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM