map相对于set区别,map具有键值和实值,所有元素根据键值自动排序。pair的第一元素被称为键值,第二元素被称为实值。map也是以红黑树为底层实现机制。
map四种插入方式mapmymap;//声明map,第一个参数key类型,第二个参数value类型 mymap.insert(pair (10, 10));//第一种插入方式 mymap.insert(make_pair(20, 20));//第二种插入方式 mymap.insert(map ::value_type(30, 30));//第三种 mymap[40] = 40;//第四种 //打印 for (map ::iterator it = mymap.begin(); it != mymap.end(); it++) { //*it取出来的是pair cout << "key:" << (*it).first << "value:" << it->second << endl; }
注意上面第四种插入方式,如果没有插入访问,比如cout打印mymap[40],这时候也会插入,由于值类型是int,因此会插入0
添加自定义类型这里添加一个类
class MyKey
{
public:
MyKey(int index, int id)
{
this->mIndex = index;
this->mID = id;
}
public:
int mIndex;
int mID;
};
定义比较类型
struct mycompare
{
bool operator()(const MyKey& key1, const MyKey& key2)const
{
return key1.mIndex > key2.mIndex;
}
};
添加元素
mapmymap;//自动排序,要告诉他怎么排序 mymap.insert(make_pair(MyKey(1, 2), 10)); mymap.insert(make_pair(MyKey(4, 5), 20));
打印元素
for (auto it = mymap.begin(); it != mymap.end(); it++)
{
cout << it->first.mIndex << ":" << it->first.mID << "=" << it->second << endl;
}



