问题:使用map统计一个字符串中的每个字符出现的次数
#include<iostream>
#include<map>
#include<string>
using namespace std;
int main()
{
map<char, int>needs;
string s;
s = { "asdwafsada" };
for (auto x : s)
{
needs[x]++; //遍历每个字符
}
map<char, int>::iterator it; //创建一个迭代器
for (it = needs.begin(); it != needs.end(); it++) // 这里能不能使用auto这种进行遍历???
{
cout << it->first <<'='<< it->second << endl;
}
return 0;
}
输出结果:
-------------------------------2022.3.28更新---------------------------------------------
使用c++11 auto遍历map
for(auto x:needs)
{
cout<<x.first<<'='<<x.end<<endl;
}
-------------------------------2022.3.30更新---------------------------------------------
map中的键一但存入是不可以更改的,只能修改指定键对应的值;
要想修改键,只能删除重新写入
插入元素:C++ STL map 类模板中对[ ]
运算符进行了重载,即根据使用场景的不同,借助[ ]
运算符可以实现不同的操作。当操作对象为 map 容器中已存储的键值对时,则借助 [ ] 运算符,既可以获取指定键对应的值,还能对指定键对应的值进行修改;反之,若 map 容器内部没有存储以 [ ] 运算符内指定数据为键的键值对,则使用 [ ] 运算符会向当前 map 容器中添加一个新的键值对。
获取元素:map 类模板中对[ ]
运算符进行了重载,这意味着,类似于借助数组下标可以直接访问数组中元素,通过指定的键,我们可以轻松获取 map 容器中该键对应的值。只有当 map 容器中确实存有包含该指定键的键值对,借助重载的 [ ] 运算符才能成功获取该键对应的值;反之,若当前 map 容器中没有包含该指定键的键值对,则此时使用 [ ] 运算符将不再是访问容器中的元素,而变成了向该 map 容器中增添一个键值对。其中,该键值对的键用 [ ] 运算符中指定的键,其对应的值取决于 map 容器规定键值对中值的数据类型,如果是基本数据类型,则值为 0;如果是 string 类型,其值为 "",即空字符串(即使用该类型的默认值作为键值对的值)。
map 的基本操作函数:
C++ Maps 是一种关联式容器,包含“关键字/值”对
begin() 返回指向 map 头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
empty() 如果 map 为空则返回 true
end() 返回指向 map 末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase() 删除一个元素
find() 查找一个元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
swap() 交换两个map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数
-------------------------------2022.3.31更新---------------------------------------------
map普通的插入都是使用insert,map.insert(map<int,int>(t-i,i)),但是如果想使用vector那样使用push_back,可以map[n].push_back(i),这样也可以完成插入.类似于vec.push_back(),map类型必须是vector或者string
//第一种方式
for(int i=1;i<=n;i++){
int s;
cin>>s;
star[s].push_back(i);//一个i对应着一个S,把i插入star[s]中
}
//第二种方式
mp[1]=2; // 1为key 2为value
//第三种方式
mp.insert(pair<int,int> (1,2));
//key为1 value为2