关联容器map按照value排序或者按照key排序
来源:互联网 发布:飞机大战java代码框架 编辑:程序博客网 时间:2024/05/21 10:29
map/multimap元素的关键字类型必须定义行为正常的<运算符或者重载operator()仿函数来比较关键字
unordered_map/unorder_multimap元素的关键字使用==运算符,或者重写()运算符和一个hash<key_type>类型的对象来组织元素
map/multimap插入元素:
map.insert(make_pair(key,value))
map.insert(pair<key,value>(key,value))
map[key]=value map使用一个不在容器中的关键字作为下标,会添加一个具有该关键字的元素到map中
通过auto ret=map.insert(make_pair(key,value)) 若ret.second==false,则key已经存在,insert实际不进行任何操作。如果key不存在,元素被插入到map中,ret.second==true。
map/multimap删除元素:
map.erase(key) 删除关键字为key的元素,返回删除元素的个数
map.erase(iterator iter) 删除迭代器iter指定的元素,返回指向iter后一个元素的迭代器
map.erase(fir_iter,end_iter) 删除指定范围内的元素,返回end_iter
map/multimap访问元素:
map.find(key) 查找容器是否存在key的元素。返回指向第一个关键字为key的迭代器
map.cout(key) 返回容器中关键字为key的元素个数
一:map按照value进行排序
利用std::sort函数去排序
void sort(RanIt first,RanIt last,Rred cmp)
创建一个结构体id_value去保存map中的key和value;
遍历map,把map中所有的值存放一个Vector<结构体id_value>中去
利用std::sort排序函数自定义比较函数把Vector中的结构体按照value大小排序
根据排序好的Vector取出结构体中的id即可对应map中的key
bool cmp(A &a1; A &a2)
{
return a1.member>a2.member;
}
cmp比较函数可以是成员函数,但是必须是静态成员函数
或者是全局非成员函数。
二:map按照key进行排序,自定义类型作为map的key
map是顺序容器,即元素会按照key的大小进行排序。如果key是自定义元素,则需要自定义仿函数作为map的比较函数,仿函数(functor),就是使一个类的使用看上去像一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了。
或者在自定义类中重载定义<操作符
#include<iostream>#include<map>using namespace std;class A{public:A(int x){this->mynum=x;};bool operator<(const A &a)const //const放在函数后面,const是修饰this指针指向的对象,表示该成员函数不会修改类的数据{return this->mynum<a.mynum;}int mynum;};struct compare{bool operator()(const A &a1,const A &a2){return a1.mynum<a2.mynum;}};int main(){std::map<A,int,compare> my_map;A first(100);A second(200);A three(50);my_map[first]=100;my_map[second]=200;my_map[three]=50;for(std::map<A,int>::iterator iter=my_map.begin();iter!=my_map.end();iter++){cout<<iter->second<<endl;}return 0;}
三:自定义类型作为unordered_map的key
#include<iostream>#include <boost/unordered_map.hpp>#include<functional>using namespace std;class A{public:A(int x){this->mynum=x;};bool operator==(const A &a)const{return (this->mynum==a.mynum);}int mynum;};struct HashFunc{std::size_t operator()(const A &a)const{return boost::hash<int>()(a.mynum);}};int main(){boost::unordered_map<A,int,HashFunc> my_map;A first(100);A second(200);A three(50);my_map[first]=100;my_map[second]=200;my_map[three]=50;for(boost::unordered_map<A,int>::iterator iter=my_map.begin();iter!=my_map.end();iter++){cout<<iter->second<<endl;}return 0;}
- 关联容器map按照value排序或者按照key排序
- Map按照Key排序和Map按照Value排序
- Map分别按照Key和value排序
- Map按照key和value进行排序
- C++ map容器 按照value值排序
- C++ map容器 按照value值排序
- C++ map容器 按照value值排序
- C++ map容器 按照value值排序
- map 按照value排序
- Map按照Value值排序
- Java Map按照Value 排序
- java map按照value排序
- map中的元素按照key,value值排序
- Java Map集合按照key和value排序之法
- map的排序(按照key值和按照value值)
- java按照map的value排序
- c++对map按照value排序
- Map按照Value值进行排序
- UVA11997-多路归并排序-K Smallest Sums
- Visual Studio 各版本下载
- 个人心得
- 搭建git for windows服务器(100%可以成功)
- hdu 6040 Hints of sd0061(STL)
- 关联容器map按照value排序或者按照key排序
- Vue实现PopupWindow组件
- 编译出现 app:packageDebug'. > !zip.isFile() 的解决办法
- 学生管理系统---Python实现
- winform 使用vs2013制作安装包
- string转float
- 自定义标签
- Java面试题全集(下)
- JavaScrip编程易错点总结