小工具知识网

当前位置: 首页 > 行业知识 > 【C++】--- STL之 set 和 map

行业知识

【C++】--- STL之 set 和 map

2026-11-07 00:41:26 来源:互联网转载

【C++】--- STL之 set 和 map

  • 一、关联式容器和键值对
    • 1.关联式容器
    • 2.键值对
    • 二、set
      • 1.set特点
      • 2.set类
        • (1) set类对象构造
        • (2)insert插入
        • (3)set遍历
        • (4)find查找
        • (5)erase删除
        • (6)计数count( )
        • (7)交换swap( )
        • (8)清空所有元素clear( )
        • (9)求set的元素个数size( )
        • 三、map
          • 1.map特点
          • 2.map类
            • (1)map类的构造
            • (2)插入insert( )
            • (3)map遍历
            • (4)删除erase( )
            • (5)查找find()
            • (6)operator[ ](重要)
            • 四、multiset 和 multimap

              一、关联式容器和键值对

              1.关联式容器

              (1)序列式容器:因为底层的数据结构是线性的,所以称它为序列式容器,比如说vector list deque 等等…

              (2)关联式容器:也是用来存储数据的,与序列式容器不同的是,其里面存储的是结构的键值对,在数据检索时比序列式容器效率更高。

              2.键值对

              什么叫做键值对???

              用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表键值,value表示与key对应的信息。

              比如:现在要建立一个英汉互译的字典,那该字典中必然有英文单词与其对应的中文含义,而且,英文单词与其中文含义是一一对应的关系,即通过该应该单词,在词典中就可以找到与其对应的中文含义。

              库中对 键值对的定义·:pair (first = key second = value)

              template struct pair {typedef T1 first_type;typedef T2 second_type;T1 first;T2 second;pair(): first(T1()), second(T2()){} pair(const T1& a, const T2& b): first(a), second(b){}};

              二、set

              1.set特点

              1. set是按照一定次序存储元素的容器
              2. 在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。
              3. 在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行排序。
              4. set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代。
              5. set在底层是用二叉搜索树(红黑树)实现的。

              2.set类

              (1) set类对象构造

              template  class set; //构造setexplicit set (const key_compare& comp = key_compare(),              const allocator_type& alloc = allocator_type());template  //使用迭代器区间构造setset (InputIterator first, InputIterator last,       const key_compare& comp = key_compare(),       const allocator_type& alloc = allocator_type()); //拷贝构造setset (const set& x); 

              (2)insert插入

              (1)创建set对象:

              #include#includeusing namespace std;void test_set1(){set s;// 构造一个set对象set s1(s.begin(), s.end());// 迭代器区间构造set s2(s1);// 拷贝构造}

              (2)插入insert:

              s.insert(1);s.insert(1);s.insert(9);s.insert(3);s.insert(7);s.insert(5);

              set的作用:排序+去重

              (3)set遍历

              (1)迭代器区间遍历:

              // 遍历set::iterator it = s.begin();while (it != s.end()){cout cout cout cout s.erase(ret);} for (auto e : s){cout cout cout cout cout cout map "left","左边" });// 4、多参数的构造函数,支持隐式类型转换(C++11 常用!!!)//}int main(){//test_set1();test_map();return 0;}cout cout mapm.erase(pos);}return 0;}cout cout cout cout string arr[] = { "苹果", "西瓜", "苹果", "西瓜", "苹果", "苹果", "西瓜","苹果", "香蕉", "苹果", "香蕉","苹果","草莓", "苹果","草莓" };map//// 这里的map对象:countMap是 一边遍历,一边插入形成二叉搜索树!//auto it = countMap.find(e);//if (it != countMap.end())// 如果在二叉搜索树里面没有找到 就会返回countMap的end()//{//it-second++; // 找到了,second++//}//else//{//countMap.insert({ e,1 }); // 没有找到就初始化 1//}//}// 法2:operator[]的运用!(传参传的是key,返回的是val&)for (auto& e : arr){countMap[e]++;}multimapcout 

上一篇:揭秘PHP程序加密技巧,守护你的代码安全!

下一篇:OCR 文字识别在未来会有哪些发展趋势?