|
STL map 包含頭文件:#include <map> 定義:std::map<long,CItem*> m_mapItems;
map.count(x)
返回map中key為x的元素個數(shù),時間復(fù)雜度為O(logn)
if(!map.count(x))
map[x]=1; map.insert(pair<...,...>) 在map中插入,參數(shù)是pair<key.type,value.type>,返回插入地址的迭代器和是否插入成功的bool并成的pair,時間復(fù)雜度為O(log n)
PS:insert在進行插入的時候是不允許有重復(fù)的鍵值的,如果新插入的鍵值與原有的鍵值重復(fù)則插入無效
用法:名稱.insert(pair<key的類型,value的類型>);
eg.
mp.insert(make_pair(2,3)); map[]運算符 map重載了[]運算符,map[key]返回key到value的引用,時間復(fù)雜度O(log n)
[]操作符是map最吸引人的地方。我們可以很方便地通過map[key]來得到key對應(yīng)的value,還可以對map[key]進行賦值操作,改變key對應(yīng)的value。
若查找的key不存在,則執(zhí)行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,轉(zhuǎn)成字符串指針 std::vector<char> vec;
char* p = &vec[0]; 字符串轉(zhuǎn)成std::vector<char> char* p="123";
std::vector<char> vec;
vec.insert(p,p 3); //內(nèi)存中16位整型,低字節(jié)在前高字節(jié)在后,證明如下: short sh = 0x0102;//內(nèi)存中低字節(jié)在前
char*p = (char*)(&sh);
//p[0] = 0x02;
//p[1] = 0x01;
//內(nèi)存中32位整型,低字節(jié)在前高字節(jié)在后,證明如下: long lo = 0x01020304;//內(nèi)存中低字節(jié)在前 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位整型數(shù)據(jù)轉(zhuǎn)成低字節(jié)在前,高字節(jié)在后的char數(shù)組。 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};轉(zhuǎn)成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可以直接轉(zhuǎn)成const char*,不可以直接轉(zhuǎn)成char*必須用GetBuffer()和ReleaseBuffer()
//CString類型數(shù)據(jù)做為memcpy()函數(shù)的參數(shù) CString s0 = "1234"; CString s1 ; char* pch = s1.GetBuffer(3);//在s1的pchData中得到3個字節(jié),用來修改。 memcpy(pch,s0,3);//這里第一個參數(shù)不能直接使用s1必須用GetBuffer()轉(zhuǎn)換,第二個參數(shù)可以直接使用CString int n = s1.GetLength();//返回s1沒有使用memcpy()函數(shù)之前的長度。 s1.ReleaseBuffer(3);//參數(shù)必須小于等GetBuffer()中的參數(shù)。
//字符串轉(zhuǎn)成十六進制32位整數(shù) //CString類型做為sscanf()函數(shù)的參數(shù) CString s0 = "01020304"; long lo; sscanf(s0,"x",&lo); //lo = 0x01020304
//字符串轉(zhuǎn)成十進制16位整數(shù) CString s = "1234"; short sh; sscanf(s,"%d",&sh);//sh = 1234;
//字符串轉(zhuǎn)成十進制8位整數(shù) CString s = "12"; char ch; sscanf(s,"%d",&ch);//ch = 12;
//CString轉(zhuǎn)成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轉(zhuǎn)成10進制整數(shù) CString s = "12"; int n = atoi(s);//注意字符串的長度
//整型數(shù)轉(zhuǎn)成CString int n = 12; CString s ; //sprintf(s,"%d",n);//CString 不能轉(zhuǎn)成char*,所以不能通過。 s.Format("d",n);
來源:https://www./content-4-658951.html
|