📜  NVP和CPRR之间的区别(1)

📅  最后修改于: 2023-12-03 15:33:15.775000             🧑  作者: Mango

NVP和CPRR之间的区别

NVP和CPRR都是C++ STL中的容器,它们之间的区别主要在以下几个方面:

1. 容器实现方式的不同

NVP是一个模板类,它是一个类模板,通过模板参数来指定键值对中的键和值的类型,底层实现使用一个vector来存储所有的元素。

CPRR是一个类模板,底层通过二叉搜索树来实现元素的存储和查找,相比于使用vector实现存储,它具有更好的查找效率。

2. 添加元素的方式不同

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;
}
3. 访问方式不同

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之间的主要区别。需要注意的是,在选择使用哪种容器时,应该根据具体的应用场景来选择,以获得更好的性能和效率。