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 }
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.用数组 因为重载了[]运算符
时间: 2024-10-16 20:52:41