話不多說,獻上代碼,您看看輸出結果:
#include
#include
首先 第一個問題
上面的代碼在vs2015的debug 下會報錯:
>libcpmtd.lib(xlocale.obj) : error LNK2001: 無法解析的外部符號 __calloc_dbg
1>1111.obj : error LNK2001: 無法解析的外部符號 __calloc_dbg
1>libcpmtd.lib(_tolower.obj) : error LNK2001: 無法解析的外部符號 __calloc_dbg
1>libcpmtd.lib(locale.obj) : error LNK2001: 無法解析的外部符號 __calloc_dbg
1>libcpmtd.lib(wlocale.obj) : error LNK2001: 無法解析的外部符號 __calloc_dbg
1>libcpmtd.lib(StlCompareStringA.obj) : error LNK2001: 無法解析的外部符號 __free_dbg
1>libcpmtd.lib(locale.obj) : error LNK2001: 無法解析的外部符號 __free_dbg
1>libcpmtd.lib(wlocale.obj) : error LNK2001: 無法解析的外部符號 __free_dbg
1>libcpmtd.lib(xlocale.obj) : error LNK2001: 無法解析的外部符號 __free_dbg
1>libcpmtd.lib(xwcsxfrm.obj) : error LNK2001: 無法解析的外部符號 __free_dbg
1>1111.obj : error LNK2001: 無法解析的外部符號 __free_dbg
1>libcpmtd.lib(locale0.obj) : error LNK2001: 無法解析的外部符號 __free_dbg
1>libcpmtd.lib(cout.obj) : error LNK2001: 無法解析的外部符號 __free_dbg
1>libcpmtd.lib(StlLCMapStringA.obj) : error LNK2001: 無法解析的外部符號 __free_dbg
1>libcpmtd.lib(StlCompareStringA.obj) : error LNK2001: 無法解析的外部符號 __malloc_dbg
1>libcpmtd.lib(locale.obj) : error LNK2001: 無法解析的外部符號 __malloc_dbg
1>libcpmtd.lib(wlocale.obj) : error LNK2001: 無法解析的外部符號 __malloc_dbg
1>libcpmtd.lib(xlocale.obj) : error LNK2001: 無法解析的外部符號 __malloc_dbg
1>libcpmtd.lib(xwcsxfrm.obj) : error LNK2001: 無法解析的外部符號 __malloc_dbg
1>1111.obj : error LNK2001: 無法解析的外部符號 __malloc_dbg
1>libcpmtd.lib(locale0.obj) : error LNK2001: 無法解析的外部符號 __malloc_dbg
1>libcpmtd.lib(cout.obj) : error LNK2001: 無法解析的外部符號 __malloc_dbg
1>libcpmtd.lib(StlLCMapStringA.obj) : error LNK2001: 無法解析的外部符號 __malloc_dbg
1>libcpmtd.lib(xmbtowc.obj) : error LNK2001: 無法解析的外部符號 __CrtDbgReportW
1>libcpmtd.lib(StlCompareStringA.obj) : error LNK2001: 無法解析的外部符號 __CrtDbgReportW
1>libcpmtd.lib(StlLCMapStringA.obj) : error LNK2001: 無法解析的外部符號 __CrtDbgReportW
1>libcpmtd.lib(locale.obj) : error LNK2001: 無法解析的外部符號 __CrtDbgReportW
1>libcpmtd.lib(wlocale.obj) : error LNK2001: 無法解析的外部符號 __CrtDbgReportW
1>libcpmtd.lib(xlocale.obj) : error LNK2001: 無法解析的外部符號 __CrtDbgReportW
1>1111.obj : error LNK2001: 無法解析的外部符號 __CrtDbgReportW
1>libcpmtd.lib(stdthrow.obj) : error LNK2001: 無法解析的外部符號 __CrtDbgReportW
1>libcpmtd.lib(syserror.obj) : error LNK2001: 無法解析的外部符號 __CrtDbgReportW
1>libcpmtd.lib(cout.obj) : error LNK2001: 無法解析的外部符號 __CrtDbgReportW
1>libcpmtd.lib(_tolower.obj) : error LNK2019: 無法解析的外部符號 __wcsdup_dbg,該符號在函數 __Getctype 中被引用
1>libcpmtd.lib(xstrcoll.obj) : error LNK2001: 無法解析的外部符號 __wcsdup_dbg
1>libcpmtd.lib(locale.obj) : error LNK2019: 無法解析的外部符號 __realloc_dbg,該符號在函數 "private: static void __cdecl std::locale::_Locimp::_Locimp_Addfac(class std::locale::_Locimp *,class std::locale::facet *,unsigned int)" (?_Locimp_Addfac@_Locimp@locale@std@@CAXPAV123@PAVfacet@23@I@Z) 中被引用
1>D:\test\testmapsort\Debug\testmapsort.exe : fatal error LNK1120: 6 個無法解析的外部命令
下面在release下運行:
我們的重點是上面代碼的輸出:
//1 string1
//2 string2
//3 string3
不知道你沒有吃驚,反正我是吃驚了,用了很久的stl,也用了一些map,但是全然不知道map會把裡面的元素進行排序!!
再看看map的描述,其中有這樣一段話:
Internally, the elements in a map are always sorted by its key following a specific strict weak ordering criterion indicated by its internal comparison object (of type Compare).
那麼,就上面的代碼而言,我們還怎麼key—value的形式存儲,但是不進行排序呢?
可以使用vector和struct的組合:
#include
#include
這個時候,你肯定會嫌麻煩啊。再查查:
好像有個東西叫std::unordered_map:
#include
#include
看看輸出,完美。