標籤:algorithm 運算子 處理 移除 begin 參數 max 問題: 技術
map就是從鍵(key)到值(value)的映射
問題:
輸入一些單詞,找出所有滿足如下條件的單詞:該單詞不能通過字母重排得到輸入文本中的另外一個單詞
在判斷是否滿足條件時,字母不區分大小寫,但在輸出時應保留輸入中的大小寫,按照字典序進行排序(所有大小字母在小寫字母的前面)
思路:
標準化字串 ,利用map映射儲存單詞以及在輸入的單詞中與該單詞匹配的次數,根據次數判斷滿足條件的單詞並輸出
代碼:
1 #include<iostream> 2 #include<string> 3 #include<map> 4 #include<vector> 5 #include<algorithm> 6 using namespace std; 7 map<string,int>tem;//建立以字串為鍵 int型資料為值的映射關係 ,即為建立了以string為下標的int型數組 8 vector<string>txt; 9 10 string stdr(const string& c)11 {12 string ans=c;13 for(int i=0;i<c.length();i++)14 ans[i]=tolower(ans[i]);15 sort(ans.begin(),ans.end());16 return ans;17 } 18 int main()19 {20 string test;21 while(cin>>test)//邊輸入邊處理 22 {23 txt.push_back(test);//壓入vector txt 24 string s=stdr(test);//標準化字串25 if(tem.count(s)==1) tem[s]++;//有匹配++ 26 else tem[s]=1; //沒有匹配則置1 27 }28 vector<string>ans;//儲存結果29 for(int i=0;i<txt.size();i++)30 {31 if(tem[stdr(txt[i])]==1)ans.push_back(txt[i]);32 } 33 sort(ans.begin(),ans.end());34 for(int i=0;i<ans.size();i++)35 cout<<ans[i]<<endl;36 37 38 }
View Code
map常用函數:
at |
尋找具有指定索引值的元素。 |
begin |
返回一個迭代器,此迭代器指向映射中的第一個元素。 |
cbegin |
返回一個常量迭代器,此迭代器指向映射中的第一個元素。 |
cend |
返回一個超過末尾常量迭代器。 |
clear |
清除映射的所有元素。 |
count |
返回映射中其鍵與參數中指定的鍵匹配的元素數量。 |
crbegin |
返回一個常量迭代器,此迭代器指向反向映射中的第一個元素。 |
crend |
返回一個常量迭代器,此迭代器指向反向映射中最後一個元素之後的位置。 |
emplace |
將就地構造的元素插入到映射。 |
emplace_hint |
將就地構造的元素插入到映射,附帶位置提示。 |
empty |
如果映射為空白,則返回 true。 |
end |
返回超過末尾迭代器。 |
equal_range |
返回一對迭代器。 此迭代器對中的第一個迭代器指向 map 中其鍵大於指定鍵的第一個元素。 此迭代器對中的第二個迭代器指向 map 中其鍵等於或大於指定鍵的第一個元素。 |
erase |
從指定位置移除映射中的元素或元素範圍。 |
find |
返回一個迭代器,此迭代器指向映射中其鍵與指定鍵相等的元素的位置。 |
get_allocator |
返回用於構造映射的 allocator 對象的副本。 |
insert |
將元素或元素範圍插入到映射中的指定位置。 |
key_comp |
返回用於對映射中的鍵進行排序的比較對象副本。 |
lower_bound |
返回一個迭代器,此迭代器指向映射中其索引值等於或大於指定鍵的索引值的第一個元素。 |
max_size |
返回映射的最大長度。 |
rbegin |
返回一個迭代器,此迭代器指向反向映射中的第一個元素。 |
rend |
返回一個迭代器,此迭代器指向反向映射中最後一個元素之後的位置。 |
size |
返回映射中的元素數量。 |
swap |
交換兩個映射的元素。 |
upper_bound |
返回一個迭代器,此迭代器指向映射中其索引值大於指定鍵的索引值的第一個元素。 |
value_comp |
檢索用於對映射中的元素值進行排序的比較對象副本。 |
shrink_to_fit |
放棄額外容量。 |
map插入
1.用insert
對於map<string, int>map_str,有以下幾種插入方式:
map_str.insert(make_pair("key", 23)); // 將索引值對{"key", 23}插入到映射中
map_str.insert({"key", 23}); // 將索引值對{"key", 23}插入到映射中
map_str.insert(map_str.begin()+2, make_pair("key", 23)); // 在第二個位置插入{"key", 23}索引值對
2.用數組 因為重載了[]運算子
C++ map