set<pair<K, V> > 默认情况下具有更大的仿函数
set<pair<K, V> > with greater functor by default
我有 map <string,int>
必须根据值对地图进行排序。
我在 set<pair<K, V> >
中转储了地图元素,其中我得到的所有元素都低于顺序,因为 set
是用 less 函子构造的。那么有什么办法可以用 greater
仿函数在 set
中插入元素。
您可以将 std::set
的第二个模板参数与 std::greater<Key>
一起使用,而不是默认的 std::less<Key>
。
std::set<Foo, std::greater<Foo>> s;
这是一个工作示例:
#include <set>
#include <functional>
#include <iostream>
int main()
{
std::set<int> a{4,2,8,6,4};
std::set<int, std::greater<int>> b(a.begin(), a.end());
for (auto i : a) std::cout << i << " ";
std::cout << '\n';
for (auto i : b) std::cout << i << " ";
std::cout << '\n';
}
输出:
2 4 6 8
8 6 4 2
正如您在此 reference 中所见,std::set
定义为:
template<
class Key,
class Compare = std::less<Key>,
class Allocator = std::allocator<Key>
> class set;
要以不同的顺序排序,我们只需提供不同的 Compare
,在这种情况下:
std::set<std::pair<K,V>, std::greater<std::pair<K,V> > mySet;
但是如果您已经有一个 std::map
并且其中包含对象,std::map
也允许使用不同的比较器:
template<
class Key,
class T,
class Compare = std::less<Key>,
class Allocator = std::allocator<std::pair<const Key, T> >
> class map;
如果您想按 K
降序排序,而不是将所有元素复制到 set
,您可以从:
开始
std::map<K, V, std::greater<K> > myDecreasingOrderedMap;
我有 map <string,int>
必须根据值对地图进行排序。
我在 set<pair<K, V> >
中转储了地图元素,其中我得到的所有元素都低于顺序,因为 set
是用 less 函子构造的。那么有什么办法可以用 greater
仿函数在 set
中插入元素。
您可以将 std::set
的第二个模板参数与 std::greater<Key>
一起使用,而不是默认的 std::less<Key>
。
std::set<Foo, std::greater<Foo>> s;
这是一个工作示例:
#include <set>
#include <functional>
#include <iostream>
int main()
{
std::set<int> a{4,2,8,6,4};
std::set<int, std::greater<int>> b(a.begin(), a.end());
for (auto i : a) std::cout << i << " ";
std::cout << '\n';
for (auto i : b) std::cout << i << " ";
std::cout << '\n';
}
输出:
2 4 6 8
8 6 4 2
正如您在此 reference 中所见,std::set
定义为:
template<
class Key,
class Compare = std::less<Key>,
class Allocator = std::allocator<Key>
> class set;
要以不同的顺序排序,我们只需提供不同的 Compare
,在这种情况下:
std::set<std::pair<K,V>, std::greater<std::pair<K,V> > mySet;
但是如果您已经有一个 std::map
并且其中包含对象,std::map
也允许使用不同的比较器:
template<
class Key,
class T,
class Compare = std::less<Key>,
class Allocator = std::allocator<std::pair<const Key, T> >
> class map;
如果您想按 K
降序排序,而不是将所有元素复制到 set
,您可以从:
std::map<K, V, std::greater<K> > myDecreasingOrderedMap;