C++ map

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.用数组 因为重载了[]运算符

 

转载于:https://www.cnblogs.com/zlspace/p/6790130.html

### C++ 中 `map` 容器的使用方法 #### 创建和初始化 `map` 在C++中,`map` 是标准模板库(STL)的一部分,用于存储键值对的数据结构。创建一个简单的整数到字符串映射可以如下所示: ```cpp #include <iostream> #include <map> using namespace std; // 初始化 map 的几种方式 void createAndInitializeMap() { // 方式一:通过下标操作符 [] map<int, string> stuMap; stuMap[1001] = "Jason"; // 方式二:使用 insert 方法配合 pair 或 make_pair 插入元素 stuMap.insert(pair<int, string>(1002, "Helen")); stuMap.insert(make_pair(1003, "Steve"))[^2]; } ``` #### 遍历 `map` 为了遍历整个 `map`,可以采用多种方式进行访问。这里展示如何利用范围for循环以及迭代器来实现这一点。 ```cpp // 使用范围 for 循环遍历 map void traverseWithRangeFor(map<int, string>& m) { for (auto& elem : m) { cout << "Key: " << elem.first << ", Value: " << elem.second << endl; } } // 使用迭代器遍历 map 并结合 STL 算法 like std::for_each void traverseWithIterator(map<int, string>& m) { auto callback = [](const pair<const int, string>& p) { cout << "Key: " << p.first << ", Value: " << p.second << endl; }; for_each(m.begin(), m.end(), callback)[^1]; } ``` #### 访问特定项 当需要获取某个具体位置上的值时,可以直接通过键名索引或者find函数查找对应的记录。 ```cpp string getValueByKey(const map<int, string>& m, const int key) { if (m.find(key) != m.cend()) { return (*m.find(key)).second; } else { throw runtime_error("Key not found"); } } ``` 上述代码片段展示了基本的操作模式,包括但不限于定义、填充、检索和遍历关联数组型容器——即 `map`。这些功能使得处理具有唯一性的键与其相关联的信息变得简单而高效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值