using namespace std;
#include<map>
#include<set>
#include<string>
#include<vector>
#include<algorithm>
void test_map1()
{
map<string, string> dict;
pair<string, string> kv1("insert", "插入");
dict.insert(kv1);
dict.insert(pair<string, string>("insert", "插入"));
//c++98
dict.insert(make_pair("insert", "插入"));
//c++11
dict.insert({ "string", "字符串" });
pair<string, string> kv2 = { "string", "字符串" };
string s = "hello"; //隐式类型转换,这个过程创建了两个string,
//一个s和一个临时变量string(const char *到string)
}
void test_map2()
{
map<string, string> dict;
dict.insert(make_pair("string", "字符串"));
dict.insert(make_pair("sort", "排序"));
dict.insert(make_pair("insert", "插入"));
// key相同,不插入,不覆盖
// key已经有了就不插入了
dict.insert(make_pair("insert", "xxxx"));
//map<string, string>::iterator it = dict.begin();
auto it = dict.begin();
while (it != dict.end())
{
//it->first = "xxx"; 不允许修改
//it->second = "xxx";
//cout << (*it).first << ":" << (*it).second << endl; //it迭代器,解引用找到结构pair,再通过.first访问
cout << it->first << ":" << it->second << endl;
//cout << it->->first << ":" << it->->second << endl;
++it;
}
cout << endl;
for (const auto& kv : dict)
{
cout << kv.first << ":" << kv.second << endl;
}
}
void test_map3()
{
// 统计次数
string arr[] = { "西瓜", "西瓜", "苹果", "西瓜", "苹果", "苹果", "西瓜", "苹果", "香蕉", "苹果", "香蕉" };
map<string, int> countMap;
//for (auto e : arr)
//{
// auto it = countMap.find(e);
// if (it == countMap.end())
// {
// countMap.insert(make_pair(e, 1));
// }
// else
// {
// it->second++;
// }
//}
for (auto k : arr)
{
countMap[k]++;//[] 通过k返回val的引用 ,如果没找到k,就创建pair(k,v()),并插入countmap
//v()匿名对象
}
for (const auto& kv : countMap)
{
cout << kv.first << ":" << kv.second << endl;
}
}
void test_map4()
{
map<string, string> dict;
dict.insert(make_pair("string", "字符串"));
dict.insert(make_pair("sort", "排序"));
dict.insert(make_pair("insert", "插入"));
cout << dict["sort"] << endl; // 查找和读
dict["map"]; // 插入
dict["map"] = "映射,地图"; // 修改
dict["insert"] = "xxx"; // 修改
dict["set"] = "集合"; // 插入+修改
}
int main()
{
test_map1();
return 0;
}
1.Map是键值对,Set是值的集合,当然键和值可以是任何的值;
2.Map可以通过get方法获取值,而set不能因为它只有值;
3.都能通过迭代器进行for...of遍历;
4.Set的值是唯一的可以做数组去重,Map由于没有格式限制,可以做数据存储
5.map和set都是stl中的关联容器,map以键值对的形式存储,key=value组成pair,是一组映射关系。set只有值,可以认为只有一个数据,并且set中元素不可以重复且自动排序。
map和set的区别/原文链接:https://blog.csdn.net/zzzlln/article/details/122113934