我如何在地图中使用排序?

时间:2014-04-30 14:47:42

标签: c++

你如何在地图中排序?
我尝试过排序(myMap.begin()myMap.end()),但它不起作用,我已经想在互联网上找到答案,但没有网站解释如何使用排序地图特别。和bdw我的地图有整数和它们的字母表示。

int main(){
map<int,string> m;
// add integers at the end of the map
m.insert(pair<int,string>(2,"Two"));
m.insert(pair<int,string>(3,"Three"));
m.insert(pair<int,string>(4,"Four"));
m.insert(pair<int,string>(7,"Seven"));
m.insert(pair<int,string>(5,"Five"));

cout<<"Finding minimum value from map"<<endl;

map<int,string>::const_iterator it3;
it3 = min_element(m.begin(),m.end());
cout<<"The minimum value in the vector is "<<it3->first<<","<<it3->second<<endl;
cout<<endl<<endl;


cout<<"Sorting array.."<<endl;
sort(m.begin(),m.end());

cout<<"Array after sorting.."<<endl;
cout << "The size of v is: " << m.size() << "\nThe capacity of v is: ";
cout<<m.max_size()    <<endl;
cout<<"The content of v is:";
for (it3 = m.begin(); it3 != m.end(); it3++){
    cout << it3->first << "," << it3->second << endl;
}
cout<<endl<<endl;

return 0;
}

3 个答案:

答案 0 :(得分:5)

地图按键排序;你无法改变它。

如果您想按键排序,那么您不需要做任何事情。如果您想按值或其他标准排序,那么您将需要另一种数据结构。

答案 1 :(得分:4)

C++ maps通常实现为高度平衡二叉搜索树。但总的来说,无论用于实现地图的数据结构是什么,地图背后的主要思想是它已经被密钥排序。所以用键明确排序是没有意义的。如果要按值排序,可以使用其他数据结构,如存储反向映射等。

答案 2 :(得分:3)

默认情况下,地图已经过排序,因此您无需自行排序。默认情况下,如果您遍历std::map,则从std::map实现{@ 1}}之后,您将获得从最低到最高的元素:

template<
    class Key,
    class T,
    class Compare = std::less<Key>,
    class Allocator = std::allocator<std::pair<const Key, T> >
> class map;

使用std::less<key>作为排序的默认比较器,如果您想以不同的方式对其进行排序,只需将其声明为

std::map<Key, Value, Comparator>

而不是

std::map<Key, Value>