概述
下面是我的另外一篇文章:
C++STL基本容器的使用
https://blog.csdn.net/qq_37941471/article/details/81980246
set
set 和 map 都是基于红黑树来实现的;两种都属于关联式容器。
K模型 :
set里面每个元素只存有一个key,它支持高效的关键字查询操作,
比如检查一个关键字是否在set中或者在 某些文本处理过程中可用set保存想要忽略的单词
set的常用接口:
begin() 返回set容器的第一个元素
end() 返回set容器的最后一个元素
rbegin 返回的值和end()相同
rend() 返回的值和rbegin()相同
lower_bound() 删除一个区间的下界
upper_bound() 删除一个区间的上界
find() 查找
上面的是搭配迭代器一起来实现
clear() 删除set容器中的所有的元素
empty() 判断set容器是否为空
max_size() 返回set容器可能包含的元素最大个数
size() 返回当前set容器中的元素个数
下面用代码来实现:
#pragma once
#include <iostream>
#include <iterator>
#include <set>
using namespace std;
void Print( set<int> s )
{
cout<<"正向迭代器:"<<endl;
set<int>::iterator it1 = s.begin();
while( it1 != s.end() )
{
cout<<*it1<<" ";
++it1;
}
cout<<endl;
}
void RPrint( set<int> s )
{
cout<<"反向迭代器:"<<endl;
set<int>::reverse_iterator it1 = s.rbegin();
while( it1 != s.rend() )
{
cout<<*it1<<" ";
++it1;
}
cout<<endl;
}
void testSet()
{
set<int> s1;
// 1. 插入数据
for( int i = 0; i < 10; i++ )
{
s1.insert(i*10);
}
Print(s1);
RPrint(s1);
// 2. 容量
cout<<"容量大小:"<<endl;
cout<<s1.size()<<endl;
cout<<endl;
// 3. 输出pos位
set<int>::iterator pos = s1.find(20);
if( pos != s1.end() )
s1.erase(pos);
s1.erase(30);
cout<<"删除20 30 后:"<<endl;
Print(s1);
cout<<endl;
// 4. 删除15-50之间的数
set<int>::iterator low = s1.lower_bound(15);
set<int>::iterator up = s1.upper_bound(50);
s1.erase(low,up);
Print(s1);
cout<<endl;
// 5. 判断60是否存在
if( s1.count(60) )
{
cout<<"60存在n"<<endl;
}
else
{
cout<<"60不存在n"<<endl;
}
// 6. 删除set容器中的所有的元素
s1.clear();
Print(s1);
}
map
K V模型:
map里面存的是一些key-value对,其中key起到索引的作用,
而value则表示于索引相关联的数据。
比如字典就是一个很好使用map的例子,把单词当作key,解释当作value。
map的常用接口:
begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase() 删除一个元素
find() 查找一个元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
swap() 交换两个map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数
头文件: #include <map>
//1.定义和初始化
map<int,string> map1; // 空map
//2.常用操作方法
map1[3] = "Saniya"; // 添加元素
map1.insert(map<int,string>::value_type(2,"Diyabi")); // 插入元素
//map1.insert(pair<int,string>(1,"Siqinsini"));
map1.insert(make_pair<int,string>(4,"V5"));
string str = map1[3]; // 根据key取得value,key不能修改
map<int,string>::iterator iter_map = map1.begin(); // 取得迭代器首地址
int key = iter_map->first; // 取得key
string value = iter_map->second; // 取得value
map1.erase(iter_map); // 删除迭代器数据
map1.erase(3); // 根据key删除value
map1.size(); // 元素个数
map1.empty(); // 判断空
map1.clear(); // 清空所有元素
//3.遍历
for(map<int,string>::iterator iter = map1.begin();iter!=map1.end();iter++)
{
int keyk = iter->first;
string valuev = iter->second;
}
用法一: 初始化 和 插入元素
#pragma once
#include <iostream>
#include <string>
#include <map>
using namespace std;
void Print( map<string,string> dict )
{
cout<<"正向迭代器:"<<endl;
map<string,string>::iterator it1 = dict.begin();
while( it1 != dict.end() )
{
cout<<it1->first<<" : "<<it1->second<<endl;
++it1;
}
cout<<endl;
}
void RPrint( map<string,string> dict )
{
cout<<"反向迭代器:"<<endl;
map<string,string>::reverse_iterator it1 = dict.rbegin();
while( it1 != dict.rend() )
{
cout<<it1->first<<" : "<<it1->second<<endl;
++it1;
}
cout<<endl;
}
void testMap()
{
map<string,string> dict;
dict.insert(pair<string,string>("sort","排序"));
dict.insert(pair<string,string>("insert","插入"));
dict.insert(pair<string,string>("string","字符串"));
dict.insert(pair<string,string>("int","整型"));
dict.insert(pair<string,string>("char","字符"));
Print(dict);
cout<<endl;
RPrint(dict);
cout<<endl;
}
#pragma once
#include <iostream>
#include <string>
#include <map>
using namespace std;
void Print( map<int,string> dict )
{
cout<<"正向迭代器:"<<endl;
map<int,string>::iterator it1 = dict.begin();
while( it1 != dict.end() )
{
cout<<it1->first<<" : "<<it1->second<<endl;
++it1;
}
cout<<endl;
}
void RPrint( map<int,string> dict )
{
cout<<"反向迭代器:"<<endl;
map<int,string>::reverse_iterator it1 = dict.rbegin();
while( it1 != dict.rend() )
{
cout<<it1->first<<" : "<<it1->second<<endl;
++it1;
}
cout<<endl;
}
void test1()
{
map<int,string> dict;
// 三种插入数据的方法
dict[2] = "hello";
dict.insert(pair<int,string> (1,"world"));
dict.insert(map<int,string>::value_type (0,"hello"));
Print(dict);
cout<<endl;
RPrint(dict);
cout<<endl;
}
运行结果:
用法二:
void Print( map<int,int> dict )
{
cout<<"正向迭代器:"<<endl;
map<int,int>::iterator it1 = dict.begin();
while( it1 != dict.end() )
{
cout<<it1->first<<" : "<<it1->second<<endl;
++it1;
}
cout<<endl;
}
void RPrint( map<int,int> dict )
{
cout<<"反向迭代器:"<<endl;
map<int,int>::reverse_iterator it1 = dict.rbegin();
while( it1 != dict.rend() )
{
cout<<it1->first<<" : "<<it1->second<<endl;
++it1;
}
cout<<endl;
}
void test1()
{
map<int,int> dict;
// 三种插入数据的方法
dict[2] = 200;
dict.insert(pair<int,int> (1,100));
dict.insert(map<int,int>::value_type (0,10));
cout<<"删除之前的元素总个数:"<<dict.size()<<endl;
cout<<endl;
Print(dict);
cout<<endl;
RPrint(dict);
cout<<endl;
dict.erase(2);
cout<<"删除之后的元素总个数:"<<dict.size()<<endl;
cout<<endl;
Print(dict);
cout<<endl;
RPrint(dict);
cout<<endl;
}
运行结果:
用法三:
void Print( map<int,int> dict )
{
cout<<"正向迭代器:"<<endl;
map<int,int>::iterator it1 = dict.begin();
while( it1 != dict.end() )
{
cout<<it1->first<<" : "<<it1->second<<endl;
++it1;
}
cout<<endl;
}
void RPrint( map<int,int> dict )
{
cout<<"反向迭代器:"<<endl;
map<int,int>::reverse_iterator it1 = dict.rbegin();
while( it1 != dict.rend() )
{
cout<<it1->first<<" : "<<it1->second<<endl;
++it1;
}
cout<<endl;
}
void test1()
{
map<int,int> dict;
for( int i = 0; i < 10; i++ )
{
dict.insert(pair<int,int> (i,i*10));
}
Print(dict);
cout<<endl;
RPrint(dict);
cout<<endl;
}
运行结果:
用法四:删除指定范围的数字
void test1()
{
map<int,int> dict;
for( int i = 0; i < 10; i++ )
{
dict.insert(pair<int,int> (i,i*10));
}
map<int,int>::iterator low = dict.lower_bound(2);
map<int,int>::iterator up = dict.upper_bound(5);
dict.erase(low,up); // 左闭右闭区间
Print(dict);
cout<<endl;
RPrint(dict);
cout<<endl;
}
运行结果:
最后
以上就是激动柜子为你收集整理的C++STL关联式容器---map和set常用的接口用法以及map和set的区别的全部内容,希望文章能够帮你解决C++STL关联式容器---map和set常用的接口用法以及map和set的区别所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复