一. 下标法的使用
所谓下标法, 就是类似数组那样子, 而在std:::map中, 下标就是你定义的key.
例子:
#include <map>
#include <string>
struct STTT
{
int nI;
};
typedef std::map<std::string, STTT*> StringSTTTPMap;
typedef StringSTTTPMap::iterator StringSTTTPMapIterator;
StringSTTTPMap mm;
STTT* p1 = new STTT;
p1->nI = 1;
STTT* p2 = new STTT;
p2->nI = 2;
mm["222"] = p1;
mm["111"] = p2;
// 这个用法很好用, 可以在
// "如果已经存在, 则不能改变; 如果不存在,则加入"的
// 场景下使用
if(0 == mm["333"])
{
mm["333"] = new STTT;
}
这个例子利用了map的一些特性:
1. 列用map, 对key排序.
2. 下标法使用时, 如果该下标不存在, 则map会自动添加, 这种情况特别适合在在value是指针的情况下使用, 因为如果是值的话, 涉及到对象的拷贝, 而指针的话就只是指针的拷贝而已, 当然, 你需要管理好你的指针.(我很喜欢这样用)
二. std::pair, insert, 遍历map中所有数据
#include <map>
#include <string>
struct STTT
{
int nI;
};
typedef std::map<std::string, STTT*> StringSTTTPMap;
typedef StringSTTTPMap::iterator StringSTTTPMapIterator;
StringSTTTPMap mm;
STTT* p1 = new STTT;
p1->nI = 1;
STTT* p2 = new STTT;
p2->nI = 2;
// insert插入, 插入的是std::pair
mm.insert(std::pair<std::string, STTT*>("222", p1));
mm.insert(std::pair<std::string, STTT*>("111", p2));
StringSTTTPMapIterator iter;
for(iter = mm.begin(); iter != mm.end(); iter++)
{
// pair的first和second
std::cout << iter->first << ” ” << iter->second << std::end;
}
三. 自定义排序
你可以自定义key的排序, 暂时没验证.