结对类stl在c ++中有什么用,像数据类型还是容器?

时间:2019-07-29 19:07:02

标签: c++ stl

我基本上想知道我们可以在哪个区域使用stl,如何在stl上进行迭代。这是一个简短的代码,我尝试对它进行迭代,但是给出了错误。

int main()
{

    pair<int,int>a;
    a=make_pair(1,22);
    a=make_pair(2,33);
    a=make_pair(3,44);

    for(pair<int,int>::iterator i:a)
    {
        cout<<a.first<<"-->";
        cout<<a.second;
        cout<<endl;
    }
}

3 个答案:

答案 0 :(得分:2)

每当您拥有具有键/值关系的数据时,如果还需要键,那么一对可能会派上用场。

一个对只能存储两个元素,因此您尝试存储三对将不起作用。每个新对将替换旧对。如果您需要多个配对,则添加一个所需配对类型的容器。示例:

#include <iostream>
#include <tuple>
#include <vector>

int main() {
    std::vector<std::pair<int, int>> a;
    a.emplace_back(1, 22);
    a.emplace_back(2, 33);
    a.emplace_back(3, 44);

    for(auto [First, Second] : a) {
        std::cout << First 
                  << "-->"
                  << Second
                  << "\n";
    }
}
  

我们如何遍历配对

不能。如果需要将对中的值传递给以可迭代的参数作为参数的函数,则需要手动进行操作,例如:

for(auto p : a) { // a is a std::vector<std::pair<int, int>>
    for(auto value : {p.first, p.second}) {
        std::cout << value << "\n";
    }
}

答案 1 :(得分:1)

std::pair用于实现std::mapstd::unordered_map

对于std::mapstd::unordered_map

value_typestd::pair<const Key, T>

除此之外,std::pair便于创建由两个成员组成的类型。

答案 2 :(得分:1)

  

[pair class]是数据类型还是容器?

所有类都是数据类型。更具体地说,std::pair是一个类模板;它不是一个类,但是它的实例是类。

std::pair不是Container

  

c ++中对类stl的用途是什么

其目的是将两个对象组合在一起。 std::pair的实例是具有两个成员对象的类。也可以在没有模板的情况下定义此类:

struct CustomClassWithoutStd {
    int         first;
    std::string second;
};

std::pair优于自定义类的优点是,您无需为这些成员指定名称,并且具有不同用例的不同对可以相同地处理,因为它们是相同的对类型,并且具有相同的对类型。每个成员的名字。

主要缺点是您无法为这些成员提供名称,这通常会降低程序的可读性。

  

我基本上想知道我们可以在哪个区域使用stl

标准库在关联容器的接口中使用std::pair,该对将键和值组合在一起。因此,当您使用此类容器时,还需要使用配对。

在我看来,这是一个糟糕的设计选择,而具有正确命名的成员的类将是一个更好的选择。

  

我们如何遍历stl对

如果您有一个可以接受该对中任一部分的函数模板,则可以同时使用这两个部分来调用它(我以流插入为此类模板的示例):

auto a = std::make_pair(1, 22);
cout << a.first;
cout << a.second;