关于set的自定义比较函数的使用及结构体的上下二分用法
如果set的類型是個結(jié)構(gòu)體
我們需要定義重載函數(shù)
***set 容器模版需要3個泛型參數(shù),如下:
template <class Key,class Compare = less <key>,class Alloc = alloc>class set {...};第一個是元素類型,必選;
第二個指定元素比較方式,缺省為 Less, 即使用 < 符號比較;
第三個指定空間分配對象,一般使用默認類型。
因此:
(1) 如果第2個泛型參數(shù)你使用默認值的話,你的自定義元素類型需要重載 < 運算操作;
(2) 如果你第2個泛型參數(shù)不使用默認值的話,則比較對象必須具有 () 操作,即:
bool operator()(const T &a, const T &b)*
如果結(jié)構(gòu)體本身就有重載<函數(shù)
用的時候只需寫
即可
如果本身比較類型沒有運算符重載函數(shù)
我們需要重載()
那么其對應(yīng)的聲明方法是
set<node,cmp>s;set中還可以使用lower_bound()和upper_bound()
那么如何對結(jié)構(gòu)體二分呢?
如果我們已經(jīng)定義了一個比較函數(shù)那么lower_bound()或是upper_bound()會根據(jù)我們寫入的重載比較函數(shù)
或是比較結(jié)構(gòu)體去比較尋找
例如:
所以完全是可以那結(jié)構(gòu)體二分的!
需要注意的就是比較函數(shù)中涉及到幾個成員變量那么關(guān)于二分的參數(shù)結(jié)構(gòu)體就得指定幾個參數(shù)。
總結(jié)
以上是生活随笔為你收集整理的关于set的自定义比较函数的使用及结构体的上下二分用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 修正discuz发帖首次换行无效的问题
- 下一篇: ppt使用vba编写倒计时_在Offic