概述
set容器
set< int > s与 set< int, less< int > () > s等价是默认升序排列,如果要降序的话可以这样写
set< int, greater< int >() > s;
但是要写头文件functional
还可以自己写排序规则
1、set是有顺序的集合,其中没有重复元素
2、迭代器命名方式:
set< int >::iterator it = set.begin();
3、set.count(data)用于判断data是否为其中的元素如果是则返回1
4、set.empty()判断集合是否为空,如果为空返回1
5、set.find(data)返回数据data的迭代器,如果没有这个数据则返回最后一个数据的迭代器的下一个位置
6、set.erase(T)表示删除迭代器T指向的数据
set.erase(data)表示删除数据data
set.erase(T,K)表示删除迭代器T到K的数据不删除K
set.erase(find(data1), find(data2))删除data1到data2之间的元素但不包括data2
7、set.insert(data) 插入元素
8、set.max_size() 返回能存储最大的数据量
9、set.size() 返回当前元素的个数
10、s1.swap(s2)两个集合的交换
11、set.clear() 清空
在从小到大的set中
12、set.lower_bound(data)返回第一个比data大或者相等的数据的迭代器,如果没有返回set.end()
13、set.upper_bound(data)返回第一个比data大的数据的迭代器,如果没有返回set.end()
在从大到小的set中 即set<int, greater< int > >
14、 set.lower_bound(data)返回第一个比data小或者相等的数据的迭代器,如果没有返回set.end()
15、set.upper_bound(data)返回第一个比data小的数据的迭代器,如果没有返回set.end()
例题:Andy’s First Dictionary
题意:用小写输出每一种单词,重复的只输出一次,不区分大小写
#include<iostream>
#include<sstream>
#include<cstring>
#include<algorithm>
#include<set>
using namespace std;
string s;
string mid;
set<string> ans;
int main()
{
while(cin >> s)
{
for(int i = 0; i < s.length() ; i++)
if(isalpha(s[i]))
s[i] = tolower(s[i]);
else
s[i] = ' ';
stringstream ss;
ss << s;
while(ss >> mid)
ans.insert(mid);
}
for(set<string>::iterator it = ans.begin() ; it != ans.end() ; it++)
cout << *it << endl;
return 0;
}
map容器
map将两个元素关联起来形成键值对(key-value)可以理解为关联数组
比如
map< string, int , op > mp 将字符串和数字关联起来,可以记录这个字符串出现的次数,第二个可以修改第一个不能修改,map容器与set容器一样,会自动排序,默认key值升序排序
可以用第一个来访问和修改第二个的值,如:
mp[string]++;
初始化
mp.insert(pair<string, int>(‘a’, 10));
mp.insert(make_pair<“hello”, 10>);
mp.insert(map<string, int>::value_type(“hello”, 10));
mp[hello] = 10;
mp.size();//有多少个键值对
加上例题
Ananagrams
题意:找出文章中不能通过重新组合变成另外一个词的词
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
using namespace std;
string s;
map<string, int> word;//记录标准化以后的string 和数目
vector<string> ans;//记录答案
vector<string> s2;//记录原始数据(单词)
string standard(string s1)//标准化,按字典序排序 便于比较
{
for(int i = 0; i < s1.length() ; i++)
{
s1[i] = tolower(s1[i]);
}
sort(s1.begin() , s1.end() );
return s1;
}
int main()
{
while(cin >> s && s[0] != '#')
{
s2.push_back(s);
s = standard(s);
word[s] ++;
}
for(int i = 0; i < s2.size(); i++)
{
if(word[standard(s2[i])] == 1)//如果只出现过一次就存进答案数组
ans.push_back(s2[i]);
}
sort(ans.begin(), ans.end());
for(vector<string>::iterator it = ans.begin(); it != ans.end(); it++)
{
cout << *it << endl;
}
return 0;
}
最后
以上就是独特火车为你收集整理的C++——STL的set与map简单使用set容器map容器的全部内容,希望文章能够帮你解决C++——STL的set与map简单使用set容器map容器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复