C++学习之路之容器(map)-有序(元素不允许相同)
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main(){
std::map<int, string> data;
std::map<int, string> data1;
map<double, std::pair<int, string>> path;
path.emplace(0.1, std::make_pair(12, "shuju"));//插入数据
//赋值
data.insert(pair<int, string>(1,"Jim"));
data.insert(map<int, string>::value_type(2, "Tom"));
data[3] = "Jerry";
data[4] = "Arm";
// data.insert_or_assign(1,"Arm");//键值相同,其内容替换 C++17
// 使用 pair 的移动构造函数
data.emplace(std::make_pair(5, std::string("a")));
// 使用 pair 的转换移动构造函数
data.emplace(std::make_pair(6, "abcd"));
// 使用 pair 的模板构造函数
data.emplace(7, "ddd");
// data.try_emplace(7, "ddd");若键不存在则原位插入,若键存在则不做任何事 C++17
//元素访问
string value = data.at(1);
string value1 = data[1];
//迭代器
map<int, string>::iterator it = data.begin();
map<int, string>::iterator it = data.end();
map<int, string>::const_iterator it = data.cbegin();
map<int, string>::const_iterator it = data.cend();
map<int, string>::reverse_iterator it = data.rbegin();
map<int, string>::reverse_iterator it = data.rend();
map<int, string>::const_reverse_iterator it = data.crbegin();
map<int, string>::const_reverse_iterator it = data.crend();
//容量
data.empty();
data.size();
data.max_size();
//删除
data1.erase(1);
// data1.erase(data1.begin(),data1.end());
//返回指定元素出现的次数, (帮助评论区理解: 因为key值不会重复,所以只 能是1 or 0)
//迭代
map<int, string>::iterator it = data.begin();
while(it != data.end()){
cout<< "data " << it->first << " " << it->second<< endl;
it++;
}
cout<< "---------------"<< endl;
for(auto item = data.rbegin();item!=data.rend();item++){
cout<< "data " << item->first << " " << item->second<< endl;
}
cout<< "---------------"<< endl;
for(auto item = data.begin();item != data.end();item++){
cout<< "data " << item->first << " " << item->second<< endl;
}
cout<< "---------------"<< endl;
for(size_t i = 1;i<data1.size()+1;i++){//注意角标
cout<< "data1 " << i << " " << data1[i]<< endl;
}
//交换
data.swap(data1);
data1.count(3);//返回匹配特定键的元素数量
//查找一个元素
auto iter = data1.find(2); //如果查找map中没有的元素,则会显示错误;段错误 (核心已转储)
cout<< "data1.find() " << iter->first << " "<< iter->second<< endl;
//返回可以容纳的最大元素个数
// cout<< "data1.find() " << *data1.find("Arm")<< endl;
//返回比较元素value的函数
// data1.value_comp();
//返回比较元素key的函数
// data1.key_comp();
//返回特殊条目的迭代器对
// data1.equal_range();
//返回map的配置器
// data1.get_allocator();
//返回键值>=给定元素的第一个位置
// data1.lower_bound();
//返回键值>给定元素的第一个位置
// data1.upper_bound();
// data1.cend();
return 0;
}
编译:g++ map.cpp -o map