c++ map
一、map是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。
对于迭代器来说,可以修改实值,而不能修改key。
#include <map> using namespace std; map<int,vector<byte>> mapDatas; void CMFCApplication2Dlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 vector<byte> vTemp; for (int i = 0; i < 4; i++) { vTemp.clear(); vTemp.push_back((byte)i); vTemp.push_back((byte)(i+1)); mapDatas.insert(map<int, vector<byte>>::value_type(i, vTemp)); } map<int, vector<byte>>::iterator iter; for (iter = mapDatas.begin(); iter != mapDatas.end(); iter++) { int key = iter->first; vector<byte> value = iter->second; OutputDebugString(_T("\r\n")); for (int i = 0; i < value.size(); i++) { CString str; str.Format(_T("0x%02X"), value[i]); OutputDebugString(str+" "); } } }
二、可以是结构体等自定义数据类型
struct Var_Type{ const char* name; int byte_size; };
map<string,std::vector<Var_Type>> data_map_;
void MainWindow::on_pushButton_2_clicked() { Var_Type t1; t1.name="a1"; t1.byte_size =10; Var_Type t2; t2.name="a2"; t2.byte_size =20; Var_Type t3; t3.name="a3"; t3.byte_size =30; Var_Type t4; t4.name="a4"; t4.byte_size =40; vector<Var_Type> vec1; vec1.push_back(t1); vec1.push_back(t2); vector<Var_Type> vec2; vec2.push_back(t3); vec2.push_back(t4); string key ="a"; if(data_map_.count(key)==0) { data_map_.insert(pair<string, vector<Var_Type>>(key,vec1)); } if(data_map_.count(key)==0) { data_map_.insert(pair<string, vector<Var_Type>>(key,vec2)); } } void MainWindow::on_pushButton_3_clicked() { setbuf(stdout, NULL); std::vector<Var_Type> data=data_map_["a"]; int size = data.size(); for(int i =0;i<size;i++) { printf("name:%s\n",data[i].name); printf("byte_size:%d\n",data[i].byte_size); } }