如何禁止STL map 自动排序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何禁止STL map 自动排序相关的知识,希望对你有一定的参考价值。
是不能禁止的,本身就是个搜索二叉树,必须要指定key_compare,默认的是less<T>,可以自己定义比较仿函数,但是也是按照定义的比较进行排序。如果要保留插入顺序得保证插入时的key就是有序的,或者用其它容器。 参考技术A map以平衡二叉查找树来实现(具体来说,常见stl都用红黑树来实现)。在插入的时候已经实现了排序,等在取出来的时候,就已经排序号了,楼主请研究下搜索二叉树。她是map的底层结构。
沃老师学生的成绩+stl string 的删除操作,加map的自动排序
思路:stl大法好 将字符的末尾0给去掉,然后比较string的大小,同时用map的自动排序将名字按照字典序输出,>>>stl大法好
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<map> #include<set> #include<vector> using namespace std; const int N=2e5+10; map<string,int>a; map<string,string>b; struct node{string a,b;}d[N]; void solve(string &s1){ int len1=s1.size(); auto it=s1.end();it--; while(it!=s1.begin()&&*it==‘0‘) s1.erase(it),it--; } typedef pair<string,string>P;vector<P>vv; bool cmp(P s1,P s2){return s1.second>s2.second||(s1.second==s2.second&&s1.first<s2.first);} int main(){ std::ios::sync_with_stdio(false);cin.tie(0); int n; while(cin>>n){ string s1,s2; while(!vv.empty()) vv.pop_back(); a.clear(),b.clear(); for(int i=1;i<=n;i++){ cin>>s1>>s2; d[i].a=s1,d[i].b=s2; solve(s2);vv.push_back({s1,s2}),a[s1]=i; } int tot=1; sort(vv.begin(),vv.end(),cmp); for(auto it=vv.begin();it!=vv.end();it++){ string tmp=it->first; cout<<tmp<<" "<<d[a[tmp]].b<<endl; } } return 0; }
以上是关于如何禁止STL map 自动排序的主要内容,如果未能解决你的问题,请参考以下文章