在有序容器中自定义排序

Custom sorting in ordered container

我有一个带对象的有序容器(通常是 std::vector),比方说

  1. Banana
  2. Apple
  3. Peach

及以上定制订单。现在对象经过一些处理,可能已从容器中移除并重新插入,从而产生一个新的有序容器。

我已经存储了顺序 (Banana -> 1, Apple -> 2, Peach -> 3) 并希望在新订购的容器中重新建立该特定自定义订单。

此时对象已经存在(即我不能简单地按所需顺序插入)。

所以我想知道标准库中是否有一些我可以巧妙地使用的算法,而不是我自己过度交换一些天真的算法......?

std::sort 在标准库中而且非常巧妙!它可以按默认的 < 运算符排序(你可以为你的水果覆盖它)或者你可以提供一个在你的 class' 实现之外的比较器。

http://www.cplusplus.com/reference/algorithm/sort/?kw=sort

好吧,Igor 写的差不多就可以了..

std::sort(fruits.begin(), fruits.end(), 
          [&](const std::string& a, const std::string& b) 
          { return rank[a] < rank[b]; } ); 

其中排名是 std::map<std::string, int> 保存字符串到排名的映射