c++ stl中map的按key排序
其實,為了實現快速查詢,map內部本身就是按序儲存的(比如紅黑樹)。在我們插入鍵值對時,就會按照key的大小順序進行儲存。這也是作為key的型別必須能夠進行《運算比較的原因。現在我們用string型別作為key,因此,我們的儲存就是按學生姓名的字典排序儲存的。
map的定義如下:
template < class key, class t, class compare = less,
class allocator = allocator> > class map;
less是stl裡面的乙個函式物件,function object,也叫作仿函式,其實現如下:
template struct less : binary_function
};
c++ stl中map的按value排序
網上說的一些方法看似可行但實際有問題,使用lambda表示式,函式物件,都沒有辦法達到想要的結果。會報一些奇怪的錯誤,目前只有一下幾個是可行的。
方法1. 將map中的key和value分別存放在乙個pair型別的vector中,然後利用vector的sort函式排序,其中map_verb存放我的map值
方法2. 再新建乙個map結構,然後把已知的map值得key和value分別作為新map的value和key,這樣map結構就會自動按照value值排序
對於leetcode上的一道演算法題top k frequent elements,使用如下方法求解:
given a non-empty array of integers, return the k
most frequent elements.
for example,
given [1,1,1,2,2,3]
and k = 2, return [1,2].
class solution
vectorvec;
map, greater> cnt_res;
for(map::iterator iter = cnt.begin(); iter != cnt.end(); ++iter)
int temp = 0;
//sort(cnt_res.begin(), cnt_res.end(), (pair> i, pair> j));
map>::iterator iter = cnt_res.begin();
while(temp < k)
}++iter;
}return vec;}};
這裡正是運用了第二種方法,新建了乙個map,將key,value的型別互換,使得元素自動排序的時候使用降序排序。
順便寫一下lambda表示式的用法,
c++11 的 lambda 表示式規範如下:
[ capture ] ( params ) mutable
exception
attribute -> ret
(1)[ capture ] ( params ) -> ret
(2)[ capture ] ( params )
(3)[ capture ]
(4)其中
省略了引數列表,類似於無參函式 f()。
mutable 修飾符說明 lambda 表示式體內的**可以修改**獲的變數,並且可以訪問**獲物件的 non-const 方法。
exception
說明 lambda 表示式是否丟擲異常(noexcept),以及丟擲何種異常,類似於void f(
)throw
(x, y)。
attribute
用來宣告屬性。
另外,capture 指定了在可見域範圍內 lambda 表示式的**內可見得外部變數的列表,具體解釋如下:
此外,params 指定 lambda 表示式的引數。
乙個具體的 c++11 lambda 表示式例子:
#include #include #include #include int main()
; int x = 5;
c.erase(std::remove_if(c.begin(), c.end(), [x](int n) ), c.end());
std::cout << "c: ";
for (auto i: c)
std::cout << '\n';
// the type of a closure cannot be named, but can be inferred with auto
auto func1 = (int i) ;
std::cout << "func1: " << func1(6) << '\n';
// like all callable objects, closures can be captured in std::function
// (this may incur unnecessary overhead)
std::functionfunc2 = (int i) ;
std::cout << "func2: " << func2(6) << '\n';
}
Map中按照value的大小進行排序
把map中的資料按照value的大小進行排序並輸出是乙個比較常見的需求.思路 1 將map中的所有entry轉化為乙個arraylist list cityinfolist new arraylist cityinfo.entryset 2 呼叫collections.sort 方法,對元素 map...
C 中對map按照value進行排序
實現方法 如果想要對map中元素按照value進行排序,先把map的元素按pair形式插入到vector中,再對vecotr進行排序 用乙個自定義的比較函式 這樣就可以實現對map的value排序了。以下 實現了按照map中的value進行排序的功能,還給出了遍歷map的幾種方式,僅供參考哈,各位。...
map中刪除指定元素
map中刪除元素的操作一般是針對特定的鍵,那麼對於特定的值,是如何進行刪除操作呢?include include include using namespace std void remove elements std map string int m map int iterator it for...