std::map .find().second
时间: 2024-06-18 11:03:16 浏览: 173
std::map是C++ STL中的一个关联式容器,它提供了一种映射的关系,可以将键值与数据值进行一一映射。其中,find()函数可以用来查找某个键值是否存在,如果存在,返回一个迭代器,否则返回末尾迭代器。而.second则是用来返回迭代器指向的元素的数据值(即映射关系中的值)。举个例子:
```
std::map<int, std::string> myMap;
myMap = "hello";
myMap = "world";
auto it = myMap.find(1);
if(it != myMap.end()) {
std::cout << it->second << std::endl; // 输出 hello
}
```
在上述代码中,我们定义了一个映射关系,将整数与字符串进行映射。然后使用find函数查找键值为1的元素是否存在,由于存在,所以返回了一个迭代器,通过迭代器的second成员函数获取到了与1对应的字符串"hello"。
相关问题
std::map.find()使用
在C++中,std::map是一个关联容器,它存储了一对键值对,并根据键的顺序进行排序。std::map.find()函数用于在map中查找指定的键,并返回一个指向该键的迭代器。如果找到了该键,则返回指向该键的迭代器;如果未找到,则返回指向map末尾的迭代器。
下面是std::map.find()的使用示例:
```cpp
#include <iostream>
#include <map>
int main() {
std::map<int, std::string> mapS;
mapS[1] = "one";
mapS[2] = "two";
mapS[3] = "three";
std::map<int, std::string>::iterator it = mapS.find(2);
if (it != mapS.end()) {
std::cout << "Key found! Value: " << it->second << std::endl;
} else {
std::cout << "Key not found!" << std::endl;
}
return 0;
}
```
输出结果为:
```
Key found! Value: two
```
指出该类的错误并改正 :class TraceHolder { public: TraceHolder() = delete; static void Register(const std::string& task_name) { auto &map = GetMap(); auto it = map.find(task_name); if (it == map.end()) { std::unique_ptr<StopWatch> ticker = std::make_unique<StopWatch>(); map[task_name] = std::move(ticker); return; } auto ticker = it->second; ticker->reset(); return; } static bool Tick(const std::string &task_name) { auto &map = GetMap(); auto it = map.find(task_name); if (it == map.end()) return false; auto ticker = it->second; ticker->getTime(); double val = ticker->getTime(); TLOGI("%s took %lf ms.", task_name.c_str(), val); return true; } static std::map<std::string, std::unique_ptr<StopWatch>()> &GetMap() { static std::map<std::string, std::unique_ptr<StopWatch>()> map; return map; } };
错误:
1. 在定义静态成员函数 GetMap() 时,应该返回一个引用类型的 map,但是现在返回的是一个指向 map 的 unique_ptr。
2. 在 Tick() 函数中,应该先调用 getTime() 函数获取计时器的时间,再输出日志,但是现在的代码中打印日志和获取时间的顺序颠倒了。
改正后的代码如下:
```
class TraceHolder {
public:
TraceHolder() = delete;
static void Register(const std::string& task_name) {
auto& map = GetMap();
auto it = map.find(task_name);
if (it == map.end()) {
std::unique_ptr<StopWatch> ticker = std::make_unique<StopWatch>();
map[task_name] = std::move(ticker);
return;
}
auto& ticker = it->second;
ticker->reset();
return;
}
static bool Tick(const std::string& task_name) {
auto& map = GetMap();
auto it = map.find(task_name);
if (it == map.end()) return false;
auto& ticker = it->second;
double val = ticker->getTime();
TLOGI("%s took %lf ms.", task_name.c_str(), val);
return true;
}
static std::map<std::string, std::unique_ptr<StopWatch>>& GetMap() {
static std::map<std::string, std::unique_ptr<StopWatch>> map;
return map;
}
};
```
阅读全文