在有序容器中自定义排序
Custom sorting in ordered container
我有一个带对象的有序容器(通常是 std::vector
),比方说
Banana
Apple
Peach
及以上定制订单。现在对象经过一些处理,可能已从容器中移除并重新插入,从而产生一个新的有序容器。
我已经存储了顺序 (Banana
-> 1, Apple
-> 2, Peach
-> 3) 并希望在新订购的容器中重新建立该特定自定义订单。
此时对象已经存在(即我不能简单地按所需顺序插入)。
所以我想知道标准库中是否有一些我可以巧妙地使用的算法,而不是我自己过度交换一些天真的算法......?
std::sort 在标准库中而且非常巧妙!它可以按默认的 < 运算符排序(你可以为你的水果覆盖它)或者你可以提供一个在你的 class' 实现之外的比较器。
好吧,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>
保存字符串到排名的映射
我有一个带对象的有序容器(通常是 std::vector
),比方说
Banana
Apple
Peach
及以上定制订单。现在对象经过一些处理,可能已从容器中移除并重新插入,从而产生一个新的有序容器。
我已经存储了顺序 (Banana
-> 1, Apple
-> 2, Peach
-> 3) 并希望在新订购的容器中重新建立该特定自定义订单。
此时对象已经存在(即我不能简单地按所需顺序插入)。
所以我想知道标准库中是否有一些我可以巧妙地使用的算法,而不是我自己过度交换一些天真的算法......?
std::sort 在标准库中而且非常巧妙!它可以按默认的 < 运算符排序(你可以为你的水果覆盖它)或者你可以提供一个在你的 class' 实现之外的比较器。
好吧,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>
保存字符串到排名的映射