如何更改std :: map的顺序?

时间:2012-08-03 00:02:13

标签: c++ map

有没有人知道有没有办法可以将地图顺序从较少更改为“更多”?

例如:

map<string, int>名为test。我插入了一些条目:

test["b"] = 1;
test["a"] = 3;
test["c"] = 2;

在地图内,订单将为(a, 3)(b, 1)(c, 2)

我希望它是(c, 2)(b, 1)(a, 3)

我怎样才能轻松完成?

2 个答案:

答案 0 :(得分:9)

使用std::greater作为密钥,而不是std::less

e.g。

std::map< std::string, int, std::greater<std::string> > my_map;

请参阅the reference

答案 1 :(得分:2)

如果你有一个现有的地图,而你只想反过来循环地图的元素,请使用反向迭代器:

// This loop will print (c, 2)(b, 1)(a, 3)

for(map< string, int >::reverse_iterator i = test.rbegin(); i != test.rend(); ++i)
{
    cout << '(' << i->first << ',' << i->second << ')';
}