在c++中使用键值对
起因
因为最近没上班,边看起LeetCode算法,便尝试用C++做一些简单的算法题.一直没接触到C++的键值对集合. 在C++键值对集合分为顺序和无序的.
set
int main(int argc, char *argv[]) {
//使用set 需要引入set头文件
set<int> set1; //方式1 定义并初始化一个set
set<int> set2{1, 2, 3}; //方式而 初始有值的set集合
int arr[] = {3, 2, 4};
set<int> set3(arr, arr + sizeof(arr) / sizeof(int));
//在set添加元素
set3.insert(1);
//遍历set
for (set<int>::iterator iter = set3.begin(); iter != set3.end(); iter++) {
cout << *iter << " ";
}
cout << endl;
//简历遍历元素的方式
for (auto item : set3) {
cout << item << " ";
}
cout << endl;
//移除元素
set3.erase(1);
cin.get();
return 0;
}
map
int main(int argc, char *argv[]) {
//使用map需要引入map头文件
map<int, int> map1;
vector<int> vec1{3, 2, 4};
for (int i = 0; i < vec1.size(); ++i) {
map1[vec1[i]] = 0; //根据key 修改值
}
//通过insert插入key和value, 通过insert会判断key是否存在,如果存在会报错
map1.insert(pair<int, int>(6, 0));
map1.insert(make_pair<int, int>(10, 0));
//根据迭代器遍历元素key 和 value
for (map<int, int>::iterator iter = map1.begin(); iter != map1.end(); iter++) {
cout << "key: " << iter->first << " value:" << iter->second << endl;
}
//简化遍历元素的方式
for (auto item : map1) {
cout << "key: " << item.first << " value:" << item.second << endl;
}
//删除元素
map1.erase(6); //删除key为6的元素
cin.get();
return 0;
}

在删除元素中,再次查看元素的顺序.

unordered_set
int main(int argc, char *argv[]) {
vector<int> vec1{3, 2, 4};
//使用unordered_set需要引入unordered_set头文件
unordered_set<int> set1;
unordered_set<int> set2{3,2,1,10,6,5,4};
unordered_set<int> set3;
for (int i = 0; i < vec1.size(); ++i) {
set3.insert(vec1[i]); //循环插入元素
}
//根据迭代器遍历元素key 和 value
for (unordered_set<int>::iterator iter = set3.begin();iter!=set3.end();iter++) {
cout << *iter << " ";
}
cout<<endl;
//简化遍历元素的方式
for (auto item : set3) {
cout << item << " ";
}
cout<<endl;
//删除元素
set3.erase(6); //删除key为6的元素
cin.get();
return 0;
}
unordered_map
int main(int argc, char *argv[]) {
vector<int> vec1{3, 2, 4};
//使用unordered_map需要引入unordered_map头文件
unordered_map<int, int> map1;
unordered_map<int, int> map2;
for (int i = 0; i < vec1.size(); ++i) {
map1.insert(pair<int, int>(vec1[i], 0));
}
//根据迭代器遍历元素key 和 value
for (unordered_map<int, int>::iterator iter = map1.begin(); iter != map1.end(); iter++) {
cout << "key:" << iter->first << " value:" << iter->second << " ";
}
cout << endl;
//简化遍历元素的方式
for (auto item : map1) {
cout << "key:" << item.first << " value:" << item.second << " ";
}
cout << endl;
//删除元素
map1.erase(2); //删除key为6的元素
cin.get();
return 0;
}
总结
在C++的容器中添加元素和删除元素分别是insert和erase,一直以来都没在c++上花过精力去学习,在使用了容器,发现C++是可以很现代的.尤其是在使用C++ 新版本(c++11 c++17),使用一些新的语法简化是可以很大程度上提高工作效率的.
秋风
2020-12-21