C 之演算法和對映

2021-09-23 22:04:31 字數 2818 閱讀 7135

演算法和對映

標準庫演算法

標準庫大約提供了80種有用的演算法。

挑選的標準演算法

r = find(b,e,v)     r值想[b:e]中v首次出現的位置

r = find_if(b,e,p)  r指向[b:e]中令p(x)為true的第乙個元素x

x = count(b,e,v)    x為v在[b:e]**現的次數

x = count_if(b,e,p)  x為[b:e]中滿足p(x)為true的元素的個數

sort(b,e)           用《運算子對[b:e]排序

sort(b,e,p)         用謂詞p對[b:e]排序

copy(b,e,b2)        將[b:e]拷貝至[b2:b2+(e-b)]; b2之後應用足夠的空間用哦關於儲存元素

unique_copy(b,e,b2) 將[b:e]拷貝至[b2:b2+(e-b)]; 不拷貝相鄰的重複元素

merge(b,e,b2,e2,r)  將有序序列[b2:e2]和[b:e]合併,並放入[r:r+(e-b)+(e2-b2)]之中

r = equal_range(b,e,v) r是有序範圍[b:e]的乙個子串行,且其中所有元素值均為v,本質上是通過二分搜尋查詢v

equal(b,e,b2)       [b:e]和[b2:b2+(e-b)]的所有元素對應相等?

x = accumulate(b,e,i) x是將i與[b:e]中所有元素進行累加的結果

x = accumulate(b,e,i,op) 與accumulate類似,但用op進行求和運算

x = inner_product(b,e,b2,i) x是[b:e]與[b2:b2+(e-b)]的內積

x = inner_product(b,e,b2,i,op,op2) 與inner_product類似,但用op和op2取代內積的+和*

最簡單的演算法 find()

template

in find(in first, in last, const t& val)

void f(vector& v, int x)

else

}auto ch = 'c'; //ch是乙個char

auto d = 2.1; //d是乙個double

lambda表示式

數值演算法

在stl標準庫中只有四種數值演算法:

x = accumulate(b,e,i) 

累加序列中的值,例如,對計算。

結果x的型別與初始值i的型別一致。

x = inner_product(b,e,b2,i)  

將兩個序列的對應元素相乘並將結果累加。例如,對和計算i+a*e+b*f+c*g+d*h。

結果x的型別與初始值i的型別一致。

r = partial_sum(b,e,r)

對乙個序列的前n個元素進行累加,並將累加結果生成乙個序列。例如,

對將生成

r = adjacent_diffenrence(b,e,b2,r)

對乙個序列的相鄰元素進行減操作,並將得到的差生成乙個序列。

例如,對將生成

關聯容器

乙個map就是乙個(鍵,值)對的有序序列,你可以基於乙個關鍵字在其中查詢對應的值,

流行的和有用的概念似乎總是由很多名稱。在標準庫中,我們將這類資料結構統稱為關聯容器(associative container).

標準庫提供了8個關聯容器:

map          (鍵,值)對的有序容器

set           關鍵字的有序容器

unordered_map (鍵,值)對的無序容器

unordered_set  關鍵字的無序容器

multimap       關鍵字可以出現多次的map

multiset       關鍵字可以出現多次的set

unordered_multimap 關鍵字可以出現多次的unoedered_map

unordered_multiset 關鍵字可以出現多次的unoedered_set  

mapint main()

{mapwords; //維護(單詞,頻率)對

for (string s; cin>>s; )

++words[s];  //注意:用string作為words的下標

for (const auto& p:words)

count<

words["sultan"]

for(string s; cin>>s;)

++words[s];      // 注意:用string作為words的下標

乙個map的元素是pair。 每個pair的第乙個元素名為first,第二個元素名為

second,因此輸出迴圈為

for (const auto& p : words)

count << p.first << ":" p.second << '\n';

map概覽

對映的實現有很多種方式,但是stl實現對映通常採用平衡二叉搜尋樹,更具體一些----紅黑樹。

一顆樹由多個節點構成。乙個node儲存乙個關鍵字和對應的值,並且指向兩個子節點。

若儲存關鍵字值的node成員的名字為first,二叉搜尋樹的基本規則是:

left->first < first && first < right->first

即,對每個節點,

它的左子節點的關鍵字小於本節點的關鍵字;

而且,本節點的關鍵字小於它的右節點的關鍵字。

這棵樹仍然遵守每個節點的關鍵字大於它的左子節點、小於它的右子節點的規則:

顯然,map的介面與vector和list是很相似的。最大的不同是在遍歷時,map的元素型別為pair。

對映集合之HashMap類和TreeMap類

1.5 遍歷的3種方式 hashmap map newhashmap map.put aa 100 map.put bb 200 system.out.println map 等號左邊為key,右邊為值。hashmap map newhashmap map.put aa 100 map.put bb...

Spring 請求對映之URL路徑對映

spring3.0引入restful架構風格支援 通過 pathvariable註解和一些其他特性支援 且又引入了 更多的註解支援 cookievalue cookie資料到處理器功能處理方法的方法引數上的繫結 requestheader 請求頭 header 資料到處理器功能處理方法的方法引數上的...

mybatis 輸入對映和輸出對映

輸入對映和輸出對映 複製昨天的工程,按照下圖進行 最終效果如下圖 parametertype 輸入型別 傳遞簡單型別 參考第一天內容。使用 佔位符,或者 進行sql拼接。傳遞pojo物件 參考第一天的內容。mybatis使用ognl表示式解析物件欄位的值,或者 括號中的值為pojo屬性名稱。傳遞po...