首页 > 其他分享 >multiset搬运

multiset搬运

时间:2024-04-16 11:56:34浏览次数:16  
标签:insert someone 搬运 students mss ms multiset

原作者:https://www.cnblogs.com/wenzhixin/p/8509909.html

#include <set>
#include <string>
#include <iostream>
using namespace std;

struct myComp{
    bool operator () (const string &a,const string &b){
        if(a.compare(b) == 1)
            return 1;
        return 0;
    }
};

struct STUDENT{
    string name;
    double score;
    //重载"<"运算符,自定义排列规则
    bool operator < (const STUDENT &a) const{
        return a.score<score;//由大到小。如果由小到大,则符号为>
    }
};

void print(multiset<string> ms);
void rprint(multiset<string> ms);

int main()
{
    //多重集合的创建与插入
    multiset<string> ms;
    ms.insert("abc");
    ms.insert("123");
    ms.insert("111");
    ms.insert("aaa");
    ms.insert("123");
    cout<<"中序正向遍历:\n";
    print(ms);
    cout<<"中序逆向遍历:\n";
    rprint(ms);
    /*运行结果
    中序正向遍历:
    111
    123
    123
    aaa
    abc
    中序逆向遍历:
    abc
    aaa
    123
    123
    111
    */

    //元素的查找
    /*同set集合容器一样,使用find()查找元素,如果找到返回钙元素的迭代器位置(如果该元素存在重复,则返回第
    一个重复元素的迭代器位置),否则,返回end()迭代器*/
    multiset<string>:: iterator it;
    it=ms.find("123");
    if(it != ms.end()) cout<<"找到键值为123的元素\n";
    it=ms.find("456");
    if(it == ms.end()) cout<<"没有找到键值为456的元素\n";
    /*运行结果
    找到键值为123的元素
    没有找到键值为456的元素
    */

    //多重集合元素的删除
    cout<<"删除前:\n";
    print(ms);
    int n=ms.erase("123");//删除键值等于某个值得所有重复元素,并返回删除元素的个数
    cout<<"删除了"<<n<<"个元素\n";
    cout<<"删除后:\n";
    print(ms);
    /*运行结果
    删除前:
    111
    123
    123
    aaa
    abc
    删除了2个元素
    删除后:
    111
    aaa
    abc
    */

    ms.clear();
    if(ms.empty()) cout<<"清除后为:空\n";
    /*运行结果
    清除后为:空
    */

    /*同样在使用insert()可以采用自定义比较函数,默认从小到大*/
    //当元素类型是基本数据类型时,采用在主函数前重载"()"操作符
    multiset<string,myComp> mss;
    mss.insert("abc");
    mss.insert("123");
    mss.insert("111");
    mss.insert("aaa");
    mss.insert("123");

    multiset<string>::iterator it1;
    for(it1= mss.begin(); it1 != mss.end(); it1 ++){
        cout<<*it1<<endl;
    }
    /*运行结果
    abc
    aaa
    123
    123
    111
    */

    //如果元素是结构体,可以将比较函数写在结构体内,见main函数之前的定义方法
    multiset<STUDENT> students;
    STUDENT someone;
    someone.name="Jack";
    someone.score=80.5;
    students.insert(someone);

    someone.name="Tomi";
    someone.score=57.5;
    students.insert(someone);

    someone.name="Nacy";
    someone.score=60.5;
    students.insert(someone);

    someone.name="Nacy";
    someone.score=60.5;
    students.insert(someone);

    multiset<STUDENT>:: iterator it2;
    for(it2 = students.begin(); it2 != students.end(); it2 ++){
        cout<<(*it2).name<<":"<<(*it2).score<<endl;
    }
    /*运行结果
    Jack:80.5
    Nacy:60.5
    Nacy:60.5
    Tomi:57.5
    */
    return 0;
}

void print(multiset<string> ms)
{
    multiset<string>:: iterator it;
    for(it=ms.begin(); it != ms.end(); it ++){
        cout<<*it<<endl;
    }
}

void rprint(multiset<string> ms)
{
    multiset<string>::reverse_iterator rit;
    for(rit=ms.rbegin(); rit != ms.rend(); rit++){
        cout<<*rit<<endl;
    }
}

标签:insert,someone,搬运,students,mss,ms,multiset
From: https://www.cnblogs.com/zzzsacmblog/p/18137785

相关文章

  • CF1913C Game with Multiset 题解
    翻译初始时你有一个空序列,共\(m\)次操作,每次操作读入两个数\(t_i\),\(v_i\),分为以下两种操作:当\(t_i=1\)时,在空序列中加入\(2^{v_i}\)这一元素。(此时\(0\lev_i\le29\))当\(t_i=2\)时,询问是否存在:取当前序列的某些元素,使它们的的和等于\(v_i\)(此时\(0\lev_i\l......
  • C++ 标准模板库 STL(1)set 与 multiset
    一、简介    set与multiset容器能够快速查找键,键是存储在一维容器中的值,二者的区别在于前者不能够存储重复的键值,后者能够存储重复键值。    set与multiset内部结构类似于二叉树,并且被插入到set与multiset容器中的元素会默认进行排序,从而提高查找速度。这意......
  • ABC221H Count Multiset
    传送门构造序列型DP。经典的就是这么一种构造序列的方式:用两种操作。增加一个\(0\)。将当前序列中所有数加\(1\)。由此可以构造出任意一种自然数不降序列。回到本题。即要求构造一个长度\(k\)和为\(n\)且没有一种数出现超过\(m\)次的不降序列,求方案数。考虑......
  • set/ multiset 容器
    set/multiset容器1.1set基本概念简介:所有元素都会在插入时自动被排序本质:set/multiset属于关联式容器,底层结构是用二叉树实现。set和multiset区别:set不允许容器中有重复的元素multiset允许容器中有重复的元素1.2set构造和赋值功能描述:创建set容器以及赋值构......
  • 商汤xtuner微调教程(搬运工,在官方文档讲述的很好)
    怎么说呢,祝大家炼丹愉快吧~......
  • set/multiset容器
    set/multiset容器头文件:#include<set>1.set基本概念所有元素都会在插入时自动被排序set/multiset属于关联式容器,底层结构是用二叉树实现。set和multiset区别:set不允许容器中有重复的元素multiset允许容器中有重复的元素2.set构造和赋值构造:set<T>st;//默......
  • ABC221H Count Multiset
    [ABC221H]CountMultiset以下内容多引用自[1]对应的文章分拆数表示将正整数\(N\)拆成若干正整数和的方案数\(P_N\),可以形式化的表示成以下方程的解的个数\[x_1+x_2+...+x_m=N,1\lex_1\lex_2\le...\lex_m\]其中我们通常将每个正整数\(x_i\)称......
  • 从CF1935C看带反悔的贪心和multiset
    Problem-C-Codeforces.思路首先很显然对\(b\)数组排序能最小化\(b\)的花费。难点在\(a\)的选择,因为已经对\(b\)排序,不可能再兼顾\(a\)的优劣,所以\(a\)需要类似枚举的技术,这是一个类似搜索最优子集的问题,可以用\(DP\),但是更可以贪心带反悔的贪心这类问题就......
  • [ARC104D] Multiset Mean
    考虑计算和为\(x\)的方案时,把所有的数减去\(x\),dp出和等于\(0\)的。减去后数被分为三段,小于\(0\),等于\(0\)和大于\(0\)。其中等于\(0\)的直接乘上即可,对于正负,上下都是对称的,直接dp出\(f_{i,j}\)表示用了前\(i\)个数和为\(j\)的方案书,使用前缀和优化,最后......
  • set/multiset
    set/multiset容器Set的特性是。所有元素都会根据元素的键值自动被排序。Set的元素不像map那样可以同时拥有实值和键值,set的元素即是键值又是实值。Set不允许两个元素有相同的键值。我们可以通过set的迭代器改变set元素的值吗?不行,因为set元素值就是其键值,关系到set元素的排序规......