想着python里面的字典是多么的优美,然后想想c++里面要实现一个双键-值对,可以用来取代二维数组(没什么必要。。。)或者是一些具有不同类型横纵坐标的表。
my[make_pair(2, 2)]这个重载了[ ]操作符,如果键不存在则会先插入一个键为(2,2)的对象,然后将值赋为0。慎用!
可以用count函数来查看该键是否已经存在。存在为1,不存在为0。
#include <cstdio>
#include <map>
using namespace std;
int main(){
map<pair<int, int>, int> my;
printf("%d\n", my.size());
my.insert( make_pair( make_pair(1, 2), 3) );
printf("%d\n", my.size());
printf("value count %d\n", my.count(make_pair(2,2)));
return 0;
}
用char*作key
由于char*仅仅是一个指针,只存储了字符串内存的首地址,如果直接用一个char*来作为key,则变成了地址作为key而不是对应的字符串作为key,一个简单的方法就是利用string的构造函数将char*转成string对象。
#include <cstdlib>
#include <string>
#include <map>
#include <cstdio>
using namespace std;
char *name, *number;
map<string, char*> phoneBook;
//insert a new element
name = (char*)malloc(21);
number = (char*)malloc(21);
scanf("%s%s", name, number); //name and number separated by a space
phoneBook.insert(make_pair(name, number));
//query
scanf("%s", name);
if(phoneBook.find(name) == phoneBook.end()){
printf("Not found\n");
}else{
printf("%s=%s\n", name, phoneBook[name]);
}