STL map 包含头文件:#include <map> 定义:std::map<long,CItem*> m_mapItems;
map.count(x)
返回map中key为x的元素个数,时间复杂度为O(logn)
if(!map.count(x))
map[x]=1; map.insert(pair<...,...>) 在map中插入,参数是pair<key.type,value.type>,返回插入地址的迭代器和是否插入成功的bool并成的pair,时间复杂度为O(log n)
PS:insert在进行插入的时候是不允许有重复的键值的,如果新插入的键值与原有的键值重复则插入无效
用法:名称.insert(pair<key的类型,value的类型>);
eg.
mp.insert(make_pair(2,3)); map[]运算符 map重载了[]运算符,map[key]返回key到value的引用,时间复杂度O(log n)
[]操作符是map最吸引人的地方。我们可以很方便地通过map[key]来得到key对应的value,还可以对map[key]进行赋值操作,改变key对应的value。
若查找的key不存在,则执行map[key]后,map会自动新建一个二元组(key,zero),并返回zero的引用。
map<string,int>mp;
for(int i=1;i<=n;i )
{
string s;
int num;
cin>>s>>num;
mp[s]=num;
}
for(int i=1;i<=m;i )
{
string s;
cin>>s;
cout<<mp[s]<<endl;
} std::vector<char> vec,转成字符串指针 std::vector<char> vec;
char* p = &vec[0]; 字符串转成std::vector<char> char* p="123";
std::vector<char> vec;
vec.insert(p,p 3); //内存中16位整型,低字节在前高字节在后,证明如下: short sh = 0x0102;//内存中低字节在前
char*p = (char*)(&sh);
//p[0] = 0x02;
//p[1] = 0x01;
//内存中32位整型,低字节在前高字节在后,证明如下: long lo = 0x01020304;//内存中低字节在前 char* pLo = (char*)(&lo);
BYTE lo1 = pLo[0];//0x04
BYTE lo2 = pLo[1];//0x03
BYTE lo3 = pLo[2];//0x02
BYTE lo4 = pLo[3];//0x01 //16位整型数据转成低字节在前,高字节在后的char数组。 char ch[3] = {0}; short sh = 0x0102; void ExchangeOrder(short sh,char*pTarget) { char*p = (char*)(&sh); pTarget[0] = p[1]; pTarget[1] = p[0];
//*(pTarget ) = p[1]; //*(pTarget ) = p[0]; //*(pTarget) = 0;
//*(pTarget ) = char(sh >> 8); //*(pTarget ) = char(sh); //*(pTarget) = 0; } char ch[5] = {0}; short sh = 0x01020304; void ExchangeOrder(long lo,char*pTarget) { char*p = (char*)(&lo); pTarget[0] = p[4]; pTarget[1] = p[3]; pTarget[2] = p[2]; pTarget[3] = p[1]; pTarget[4] = 0;
//*(pTarget ) = p[3]; //*(pTarget ) = p[2]; //*(pTarget ) = p[1]; //*(pTarget ) = p[0]; //*(pTarget ) = 0; //*(pTarget ) = char(sh >> 24); //*(pTarget ) = char(sh >> 16); //*(pTarget ) = char(sh >> 8); //*(pTarget ) = char(sh); //*(pTarget ) = 0; }
char ch[5] = {0x01,0x02,0x03,0x04,0x00};转成0x01020304 CString s = "\x01\x02\x03\x04" long l; //l = 0x01020304 void toLong(const char* p,long& l) { char ch[5] = {0}; ch[0] = *(p 3); ch[1] = *(p 2); ch[2] = *(p 1); ch[3] = *(p); l = *(long*)ch; }
//CString可以直接转成const char*,不可以直接转成char*必须用GetBuffer()和ReleaseBuffer()
//CString类型数据做为memcpy()函数的参数 CString s0 = "1234"; CString s1 ; char* pch = s1.GetBuffer(3);//在s1的pchData中得到3个字节,用来修改。 memcpy(pch,s0,3);//这里第一个参数不能直接使用s1必须用GetBuffer()转换,第二个参数可以直接使用CString int n = s1.GetLength();//返回s1没有使用memcpy()函数之前的长度。 s1.ReleaseBuffer(3);//参数必须小于等GetBuffer()中的参数。
//字符串转成十六进制32位整数 //CString类型做为sscanf()函数的参数 CString s0 = "01020304"; long lo; sscanf(s0,"x",&lo); //lo = 0x01020304
//字符串转成十进制16位整数 CString s = "1234"; short sh; sscanf(s,"%d",&sh);//sh = 1234;
//字符串转成十进制8位整数 CString s = "12"; char ch; sscanf(s,"%d",&ch);//ch = 12;
//CString转成char* CString s = "01020304"; char ch[10] = {0}; sscanf(s,"%s",ch); //ch[10] = {0x30,0x31,0x30,0x32,0x30,0x33,0x30,0x34,0x00,0x00}
//CString转成10进制整数 CString s = "12"; int n = atoi(s);//注意字符串的长度
//整型数转成CString int n = 12; CString s ; //sprintf(s,"%d",n);//CString 不能转成char*,所以不能通过。 s.Format("d",n);
来源:https://www./content-4-658951.html
|