C++使用STL中map需要注意的地方
2017-07-09 18:47
531 查看
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;
}
};
定义map时,格式为map<CTest,string,sort> m_mapTest; //key为CTest,value为string,比较类为sort
参考文章:http://www.cnblogs.com/gmark/archive/2012/12/18/2822904.html
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
相关文章推荐
- 使用C++ STL需要注意的事项
- 使用String的HashCode作为Map主键需要注意的地方
- C++使用localtime函数需要注意的地方
- C++使用localtime函数需要注意的地方http://blog.csdn.net/shellching/article/details/8114266
- C++使用localtime函数需要注意的地方
- C++使用localtime函数需要注意的地方
- C++使用localtime函数需要注意的地方
- ATL/WTL使用的几点需要注意的地方
- string使用需要注意的地方。
- 使用XHTML1.0 Strict中需要特别注意的地方
- string使用需要注意的地方。
- 从String类看写C++ class需要注意的地方
- string使用需要注意的地方。
- 使用javaBean需要注意的地方
- string使用需要注意的地方。
- 关于c++中的类以及类的继承需要注意的地方
- 使用Win2003需要注意的地方
- 使用TimerControl控件时需要注意的地方
- 使用Java中的final变量需要注意的地方。
- 使用Java中的final变量需要注意的地方。