std::map将按排序其元素
keys。它不在乎
values排序的时间。
您可以使用std::vector<std::pair<K,V>>
在排序使用std::sort
之后std::stable_sort
:
std::vector<std::pair<K,V>> items;//fill items//sort by value using std::sortstd::sort(items.begin(), items.end(), value_comparer);//sort by key using std::stable_sortstd::stable_sort(items.begin(), items.end(), key_comparer);
第一次排序应该使用
std::sort,因为它
nlog(n),然后用
std::stable_sort这是
n(log(n))^2最坏的情况。
请注意,虽然
std::sort出于性能原因选择了,
std::stable_sort但是为了保留正确的排序顺序,需要使用它来进行正确的排序。
@gsf在注释中指出, 只有
std::sort在选择
values首先比较的比较器时(如果它们相等), 才 可以使用
keys。
auto cmp = [](std::pair<K,V> const & a, std::pair<K,V> const & b) { return a.second != b.second? a.second < b.second : a.first < b.first;};std::sort(items.begin(), items.end(), cmp);
那应该是有效的。
但是,等等,有一个更好的方法:先存储
std::pair<V,K>而不是,
std::pair<K,V>然后根本不需要任何比较器-
标准比较器
std::pair就足够了,因为它先进行比较
first(即
V),然后
second进行比较
K:
std::vector<std::pair<V,K>> items;//...std::sort(items.begin(), items.end());
那应该很好。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)