您的当前位置:首页正文

C++中std::map通过key获取value的几种方法以及区别

来源:九壹网

一 前言

这篇文章聊一下C++ STL库中的std::map通过key获取value的几种方法以及区别,然后提供一个最佳实践。

二 具体方法

2.1 使用find()函数

使用find()函数可以获取到指定key对应的迭代器,从而获取value。

代码示例

//main.cpp

#include<map>
#include<string>

int main(int argc, char* argv[])
{
	std::map<std::string, std::string> demoMap;
	std::string sValue = "";

	auto ite = demoMap.find("demo");

	if (demoMap.end() != ite)
	{
		sValue = ite->second;
	}

	return 0;
}

在这段代码中,demoMap是空的,不存在key为"demo"的元素,所以find()查不到合适的元素,就会返回demoMap.end()对应的迭代器。

2.2 使用下标[]

可以直接用key作为下标获取value。

代码示例

//main.cpp

#include<map>
#include<string>

int main(int argc, char* argv[])
{
	std::map<std::string, std::string> demoMap;

	std::string sValue = demoMap["demo"];

	return 0;
}

这段代码实际上存在一些问题。在这段代码中,demoMap是空的,不存在key为"demo"的元素,这个时候使用下标[]的方法来获取value,就会在demoMap中新建一个key为"demo"的元素,导致demoMap被修改。

2.3 使用at()函数

使用at()函数也可以直接获取value。

示例代码

//main.cpp

#include<map>
#include<string>

int main(int argc, char* argv[])
{
	std::map<std::string, std::string> demoMap;

	std::string sValue = demoMap.at("demo");

	return 0;
}

这段代码实际上也存在一些问题。同样的,在这段代码中,demoMap是空的,不存在key为"demo"的元素,这个时候使用at()函数来获取value,会抛异常。

三 最佳实践

这篇文章所说的几种方法在介绍的时候也讲过区别了,如果不存在key所对应的元素时,find()函数不会产生什么影响,使用下标[]会新建元素,at()函数会抛出异常。

所以推荐做法也就是最佳实践,就是使用find()函数,因为我们在查找的时候一般不希望数据被改变,另外我们在程序中应该尽量避免异常,异常处理是一件很麻烦的事。

如果这篇文章对你有帮助,别忘了关注我啊,可能我还会写出更多对你有帮助的文章

因篇幅问题不能全部显示,请点此查看更多更全内容

Top