1、map中存放的数据为key-value(键-值对),数据结构为红黑树。
2、当key-value为非指针类型时,map会自动分配内存存储数据(是原数据的一份拷贝);因此,如果原数据保存在动态分配的内存空间中,内存空间delete以后,不会影响map的使用;此时调用的是自定义类的拷贝构造函数。
3、向map中插入的数据按key值从小到大自动排序,因此key值需要有比较功能;如果key为自定义类的对象,则类必须重载小于号,否则编译出错。
4、当key为自定义类CTest,并且自定义类CTest没有重载小于号,则定义map时需要指定比较类sort,形式如下:
class CTest
{
public:
CTest(){cout << "CTest()" << endl;}
~CTest(){}
CTest(const CTest &test)
{
a=test.a;
cout << "CTest(CTest test)" << endl;
}
//bool operator< (const CTest &test) const
//{
// if(a < test.a) return true;
// return false;
//}
int a;
};
class sort
{
public:
bool operator()(const CTest &A, const CTest &B) const
{
if(A.a < B.a) return true;
return false;
}
};
2、当key-value为非指针类型时,map会自动分配内存存储数据(是原数据的一份拷贝);因此,如果原数据保存在动态分配的内存空间中,内存空间delete以后,不会影响map的使用;此时调用的是自定义类的拷贝构造函数。
3、向map中插入的数据按key值从小到大自动排序,因此key值需要有比较功能;如果key为自定义类的对象,则类必须重载小于号,否则编译出错。
4、当key为自定义类CTest,并且自定义类CTest没有重载小于号,则定义map时需要指定比较类sort,形式如下:
class CTest
{
public:
CTest(){cout << "CTest()" << endl;}
~CTest(){}
CTest(const CTest &test)
{
a=test.a;
cout << "CTest(CTest test)" << endl;
}
//bool operator< (const CTest &test) const
//{
// if(a < test.a) return true;
// return false;
//}
int a;
};
class sort
{
public:
bool operator()(const CTest &A, const CTest &B) const
{
if(A.a < B.a) return true;
return false;
}
};
定义map时,格式为map<CTest,string,sort> m_mapTest; //key为CTest,value为string,比较类为sort
参考文章:http://www.cnblogs.com/gmark/archive/2012/12/18/2822904.html