1.c++STL中只有list自带了排序函数:

(1).若list中存放的是int类型或者string类型,直接利用sort即可:

list <int> list1;

          list1.sort();
         此时默认为升序,若要使用降序,直接自定义cmp函数即可。
(2).若存放的是结构体或其他指针类型,需要自己定义比较结构体:
          struct student
{
int num;
};
          struct node
{
bool operator()(student a,student b)

return a.num>b.num;//从大到小排序
};

list<student> list1;
list1.sort(node());
 
 
2.vector排序:
使用algorithm中的sort函数:

#include<iostream>

#include<vector>

#include<algorithm>

using namespace std;

int cmp(int a,int b){

return a > b;//按降序排序

}

int main(){

vector<int> vec;

vec.push_back(324);

vec.push_back(344);

vec.push_back(2134);

vec.push_back(23);

vec.push_back(12);

vec.push_back(134);

vec.push_back(987);

sort(vec.begin(),vec.end(),cmp);

vector<int>::iterator it;

for(it = vec.begin();it != vec.end();it++)

cout<<*it<<" ";

cout<<endl;

return 0;

}

3.STL中的set排序:其中set本身是自带排序的,默认按升序进行排序:

#include <iostream>
#include <set>
using namespace std;
int main()
{
    set <int,less<int> > set1;//若使用less,则从小到大,若使用greater则从大到小。
    set1.insert(20);
    set1.insert(15);
    set1.insert(0);
    set1.insert(80);
    set<int>::iterator cset=set1.begin();
    while(cset!=set1.end())
    {
        cout<<*cset<<" ";
        cset++;
    }
    int m;
    cin>>m;
    return 0;
}
 
 

若定义set中存储的为结构体:

#include <iostream>

#include <string>

#include <set>

using namespace std;

struct intComp {

bool operator() (const int& lhs, const int& rhs) const{

return lhs > rhs;

}

};

struct strComp

{

bool operator() (const string& str1, const string& str2) const {

return str1.length() < str2.length();

}

};

int main() {

int a[] = {10, 20, 30, 40, 50};

set<int, intComp> s1(a, a + 5);

for (auto it = s1.cbegin(); it != s1.cend(); it++)

{

cout << *it << " ";

}

cout << endl;

string b[] = {"apple", "banana", "pear", "orange", "strawberry"};

set<string, strComp > s2(b, b + 5);

for (auto it = s2.cbegin(); it != s2.cend(); it++)

{

cout << *it << " ";

}

cout << endl;

system("pause");

return 0;

}

 
4.STL中map:
由于在map中是由红黑树实现的所以自带生序排序(key)
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main()
{
map <int,string,less<int> > map1;//使用less有小到大 greater由大到小
map1[1]="HZ";
map1[8]="yu";
map1[100]="rue";
map1[-10]="23";
map<int,string>::iterator cmap=map1.begin();
while(cmap!=map1.end())
{
    cout<<cmap->first<<" ";
    cmap++;
}
int m;
cin>>m;
    return 0;
}
若存储的是结构体:
#include <iostream>
#include <map>
using namespace std;
struct student
{
int num;
};
bool operator <(student a,student b)
{
    return a.num>b.num;//由大到小
}
int main()
{
    map<student,int> map1;
    student a;
    a.num=100;
    map1[a]=10;
   
    student b;
    b.num=1000;
    map1[b]=11;
    student c;
    c.num=0;
    map1[c]=102;
    map<student,int> ::iterator st=map1.begin();
    while(st!=map1.end())
    {
        cout<<(st->first).num<<" ";
        st++;
    }
    int m;
    cin>>m;
    return 0;
}
map:(value)
#include <map>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
struct CmpByValue { 
  bool operator()(const pair<string,int> & lhs, const pair<string,int> & rhs)
  {return lhs.second > rhs.second;} 
};
void substrcount(string str)
{
    map<string,int> substr;
    string subs;
    for(int i =1; i<str.size();i++)
        for(int j =0; j<=str.size()-i;j++)
        {
subs = str.substr(j,i);
            if(substr.find(subs)==substr.end())
                substr[subs] = 1;
            else
                substr[subs] = substr[subs]+1;
        }
    vector<pair<string,int>> counts(substr.begin(),substr.end());
    sort(counts.begin(),counts.end(),CmpByValue());
    cout<<(counts.begin()->first)<<endl;
    cout<<counts.begin()->second<<endl;
}
 

c++中STL容器中的排序的更多相关文章

  1. 【转】c++中Vector等STL容器的自定义排序

    如果要自己定义STL容器的元素类最好满足STL容器对元素的要求    必须要求:     1.Copy构造函数     2.赋值=操作符     3.能够销毁对象的析构函数    另外:     1. ...

  2. C++中STL容器的比较

    基本参考 https://blog.csdn.net/qq_14898543/article/details/51381642 容器特性: vector:典型的序列容器,C++标准严格要求次容器的实现 ...

  3. 删除STL容器中的元素

    有关stl容器删除元素的问题,错误的代码如下: std::vector<struct> mFriendList; ... std::vector<struct>::iterat ...

  4. STL容器——对map排序

    STL容器(三)——对map排序 对于map的排序问题,主要分为两部分:根据key排序:根据value排序.下面我们就分别说一下~ 1. 根据key进行排序 map默认按照key进行升序排序 ,和输入 ...

  5. WPF中Grid容器中VerticalAlignment和HorizonAlignment和Margin的关系。

    在WPF中,经常使用Grid容器,来布局我们想要显示的对象. 这就不可避免的要和布局在其中的控件的VerticalAlignment特性,HorizonAlignment特性,以及Magin特性打交道 ...

  6. c++中stl容器的常用示例

    1. set(集合)——包含了经过排序了的数据,这些数据的值(value)必须是唯一的. 也就是说输入set容器后得到数据,会去重并排序.    s.insert()插入一个元素    s.begin ...

  7. 自定义String类,并且实现在STL容器中添加自定义的类型

    13.44 编写标准库string类的简化版本,命名String.你的类应该至少有一个默认构造函数和一个接受C风格字符串指针参数的构造函数.使用allocator为你的String类分配所需内存. 1 ...

  8. spring中获取容器中的Bean为什么前转成接口而不是实现类

    简单介绍一下上下文,userService是服务层接口有一个save方法,userServiceImpl是该接口的实现类重写了save方法. applicationContext.xml如图: 后台代 ...

  9. ios 中在容器中移除单个控件的两个方法Subview

    我们知道[parentView removeFromSuperView];  会把全部的view都移除.以下我们可以通过给subView设一个tag,然后遍历所有的subView,找到目标subVie ...

随机推荐

  1. VS2017开发.net core 时默认发布路径文件夹多个BPC

    新安装的VS2017,编译后进行发布,结果在bin文件夹下多了个BPC文件夹,很是费解,查了资料才知道是VS2017默认设置了环境变量.在此记录下,如果不需要默认路径可修改环境变量,具体操作如下: 我 ...

  2. fiddler 4 设置代理

    Windows使用一种被称为“AppContainer”的隔离技术,它可能会干扰lmmersive应用程序和Edge浏览器的流量捕捉.使用进度Telerik Fiddler的工具栏上的WinConfi ...

  3. javascript数据基本类型和引用数据类型区别

    基本类型和引用数据类型区别 1.基本数据类型和引用数据类型 javascript中有两种数据类型,分别是基本数据类型和引用数据类型: 基本数据(原始数据)类型指的是简单的数据段,而引用数据类型则指的是 ...

  4. css 技巧 (持续更新)

    1.滚动条样式   /*自定义滚动条-----隐藏型*/ .scroll::-webkit-scrollbar-track{ border-radius: 1px;   }   .scroll::-w ...

  5. 读取properties配置文件,value值为中文时出现乱码

    已确保idea工具默认设置都是UTF-8格式:     然后在配置类上,指定编码: @PropertySource(value = "classpath:short_message.prop ...

  6. csla框架__使用Factory方式实现Csla.BusinessBase对象数据处理

    环境:.net4.6+csla4.6 实现:对象的数据库访问及数据库执行使用Factory方式进行封闭. 正文: 以前在使用csla框架完成业务对象的定义时所有的数据处理都在对象内部实现,也不能说不好 ...

  7. 使用EXE4J和Inno Setup 编译器将java程序打包成windows桌面应用安装程序

    java项目结构如下: Demo是模仿程序快照,主要设计两个按钮:保存快照和恢复快照: 保存快照将对象(窗口)序列化保存下来,后面无论做了什么操作,只要点击恢复快照, 就会读取之前保存的序列化的对象. ...

  8. python基础数据类型-练习

    1,有如下变量(tu是个元祖),请实现要求的功能 tu = ("alex", [11, 22, {"k1": 'v1', "k2": [&q ...

  9. Python学习第四天

    一.数字 int 二.字符串 str #以下均为补充内容 #对于空字符串是假 #数字0是假 #数字和字符串可以相互转换 # a="123" # b=int(a) # a=123 # ...

  10. Asp .Net Core Spa (一) - 入门

    第一次写文章, 很久之前就想写来着了, 文章哪里不清楚的, 也请多多提出意见. 最近发现用 .net core + spa (single page application) 这个组合的人也变多了, ...