📅  最后修改于: 2023-12-03 15:33:15.775000             🧑  作者: Mango
NVP和CPRR都是C++ STL中的容器,它们之间的区别主要在以下几个方面:
NVP是一个模板类,它是一个类模板,通过模板参数来指定键值对中的键和值的类型,底层实现使用一个vector来存储所有的元素。
CPRR是一个类模板,底层通过二叉搜索树来实现元素的存储和查找,相比于使用vector实现存储,它具有更好的查找效率。
NVP采用的是pair类型来添加元素,而CPRR采用的是自身的insert函数。NVP的使用方法如下:
#include <iostream>
#include <vector>
int main() {
std::vector<std::pair<int, std::string>> myVec;
myVec.push_back(std::make_pair(1, "apple"));
myVec.push_back(std::make_pair(2, "banana"));
myVec.push_back(std::make_pair(3, "cherry"));
for (auto i : myVec) {
std::cout << i.first << "->" << i.second << std::endl;
}
return 0;
}
CPRR的使用方法如下
#include <iostream>
#include <map>
int main() {
std::map<int, std::string> myMap;
myMap.insert(std::make_pair(1, "apple"));
myMap.insert(std::make_pair(2, "banana"));
myMap.insert(std::make_pair(3, "cherry"));
for (auto i : myMap) {
std::cout << i.first << "->" << i.second << std::endl;
}
return 0;
}
NVP的一个键值对是一个pair,访问时需要通过pair的first和second成员来分别访问键和值。
CPRR则可以直接使用[]运算符来访问某一个键所对应的值。
#include <iostream>
#include <vector>
#include <map>
int main() {
std::vector<std::pair<int, std::string>> myVec;
std::map<int, std::string> myMap;
myVec.push_back(std::make_pair(1, "apple"));
myVec.push_back(std::make_pair(2, "banana"));
myVec.push_back(std::make_pair(3, "cherry"));
myMap.insert(std::make_pair(1, "apple"));
myMap.insert(std::make_pair(2, "banana"));
myMap.insert(std::make_pair(3, "cherry"));
// 访问方式
std::cout << "NVP way: " << std::endl;
for (auto i : myVec) {
std::cout << i.first << "->" << i.second << std::endl;
}
std::cout << std::endl << "CPRR way: " << std::endl;
for (auto i : myMap) {
std::cout << i.first << "->" << i.second << std::endl;
}
std::string value = myMap[1];
std::cout << value;
return 0;
}
以上就是NVP和CPRR之间的主要区别。需要注意的是,在选择使用哪种容器时,应该根据具体的应用场景来选择,以获得更好的性能和效率。