C STL map中的Key使用自定義型別

2021-06-19 08:00:59 字數 2194 閱讀 2809

c++ stl 中的map容器中的元素是按照key的公升序進行排列的,所以map的key需要使用自定義型別時,該自定義型別必須過載operator《操作符,否則會出現下面的編譯錯誤:

in file included from /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../

../.

./..

/include

/c++

/4.4.7/string:50,

from /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../

../.

./..

/include

/c++

/4.4.7/bits/locale_classes.h:42,

from /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../

../.

./..

/include

/c++

/4.4.7/bits/ios_base.h:43,

from /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../

../.

./..

/include

/c++

/4.4.7/ios:43,

from /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../

../.

./..

/include

/c++

/4.4.7/ostream:40,

from /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../

../.

./..

/include

/c++

/4.4.7/iostream:40,

from dagexing/src/online/dgxdbrpc/dgx_db.cc:2:

/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../

../.

./..

/include

/c++

/4.4.7/bits/stl_function.h:

in member function 'bool std::less<_tp>::operator()(const _tp&, const _tp&) const [with _tp = dgx_db::ktvroominfo]'

:/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../

../.

./..

/include

/c++

/4.4.7/bits/stl_map.h:449: instantiated from '_tp& std::map<_key, _tp, _compare, _alloc>::operator(const _key&) [with _key = dgx_db::ktvroominfo, _tp = dgx_db::uint32datatype, _compare = std::less, _alloc = std::allocator>]'

./dagexing/src/online/dgxdbrpc/dbcache.h:53: instantiated from 'int dgx_db::dbcache::update(const keytype&, valuetype&) [with keytype = dgx_db::ktvroominfo, valuetype = dgx_db::uint32datatype]'

dagexing/src/online/dgxdbrpc/dgx_db.cc:136: instantiated from here

/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../

../.

./..

/include

/c++

/4.4.7/bits/stl_function.h:230: error: no match for

'operator<'

in'__x < __y'

這個錯誤表示_key = dgx_db::ktvroominfo沒有過載operator《操作符。加入下列過載函式後通過編譯

bool operator <

(const ktvroominfo& info)

const

C STLmap的使用和特點 C STL相關

map是c 98中引入的二叉樹資料結構 1 map有四個引數 2 count 和find 函式傳入的引數都是key 3 finditer迭代器返回的是const int 4 在map中插入元素需要用make pair 5 insert有返回兩個引數第乙個是迭代器的位置,第二個表示插入是否成功 6 e...

vue中key值與react中key值的區別

兩者演算法比較不同 分別對olds olde s e兩兩做samevnode比較,有四種值,舊集合的開頭和結束 olds,olde 新集合的開頭和結束 s e 當其中兩個能匹配上那麼真實dom中的相應節點會移到vnode相應的位置,這句話有點繞,打個比方 大意就是每次比較四個key值,匹配上的就移動...

v for使用key的原因

1.vue中列表迴圈需加 key 唯一標識 唯一標識最好是item裡面id等。因為vue元件高度復用,增加key可以標識元件的唯一性,更好地區別各個元件。key的作用主要是為了高效地更新虛擬dom。2.key主要用來做dom diff演算法用的,diff演算法是同級比較,比較當前標籤上的key還有它...