C++ set简介及简单应用

set中所有元素都会根据元素的键值自动排序,set的元素不像map那样可以同时拥有实值(value)和键值(key),set元素的键值就是实值,实值就是键值。set不允许两个元素有相同的键值。

set的各成员函数列表如下:

1. begin()--返回指向第一个元素的迭代器

2. clear()--清除所有元素

3. count()--返回某个值元素的个数

4. empty()--如果集合为空,返回true

5. end()--返回指向最后一个元素的迭代器

6. equal_range()--返回集合中与给定值相等的上下限的两个迭代器

7. erase()--删除集合中的元素

8. find()--返回一个指向被查找到元素的迭代器

9. get_allocator()--返回集合的分配器

10. insert()--在集合中插入元素

11. lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器

12. key_comp()--返回一个用于元素间值比较的函数

13. max_size()--返回集合能容纳的元素的最大限值

14. rbegin()--返回指向集合中最后一个元素的反向迭代器

15. rend()--返回指向集合中第一个元素的反向迭代器

16. size()--集合中元素的数目

17. swap()--交换两个集合变量

18. upper_bound()--返回大于某个值元素的迭代器

19. value_comp()--返回一个用于比较元素间的值的函数

举个简单的小栗子,写的麻烦了一点,就是为了顺便练习一下文件。

/*******************************
author: yomi
date: 17.4.21
ps: 输入的单词全部为以s结尾的单词,输出将自动去掉末尾的s,同时将做一个单词排除集,该集合中的单词将原样输出。
*******************************/
#include<iostream>
#include<set>
#include<map>
#include<fstream>
#include<stdexcept>
#include<sstream>
using namespace std;

ifstream & open_file(ifstream & in, const string & file)
{
    in.close();
    in.clear();
    in.open(file.c_str());
    return in;
}
void remove_s(ifstream & remove_file, set<string>&char_set)
{
    set<string>not_change;
    string not_change_word;
    while(remove_file >> not_change_word){
        not_change.insert(not_change_word);
    }
    string word;
    while(cin >> word){
        if(not_change.count(word)){
            char_set.insert(word);
        }
        else{
            word.assign(word, 0, word.size()-1);
            ///char_set.insert(word.begin(), word.end()-1);
            char_set.insert(word);

        }
    }
}
int main(int argc, char **argv)
{
   //  by me
    set<string>char_set;
    ifstream set_it;
    if(!open_file(set_it, "text.txt")){
        throw runtime_error("no not_change file");
    }
    remove_s(set_it, char_set);

    set<string>::iterator iter = char_set.begin();
    while(iter!=char_set.end()){
        cout << *iter << endl;
        ++iter;
    }
    ///by book  简短得吓到我了 的确没必要开个set
//    set<string>exclude;
//    exclude.insert("success");
//    exclude.insert("class");
//    string word;
//    while(cin >> word){
//        if(!exclude.count(word)){
//            word.resize(word.size()-1);
//        }
//        cout << word << endl;
//    }

    return 0;
}
/* by book
strings
string
class
class
success
success
kis
ki

*/
/*

H:\Visual C++\简单C++>g++ 10-24.cpp -o 10-24.exe

H:\Visual C++\简单C++>10-24 notchange.txt
success
oppas
strings
class
^Z
class
oppa
string
success

H:\Visual C++\简单C++>
*/

 

 

 

 

转载于:https://www.cnblogs.com/AbsolutelyPerfect/p/8253042.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值