为什么我必须使用std :: make_pair?

时间:2019-12-09 18:23:49

标签: c++ c++11 path-finding

我已经用过typedef

typedef std::pair<int, int> coords;
typedef std::pair<float, coords> fcoords;

,然后创建此数据类型的向量

std::vector<fcoords> openList;

因此,当我尝试向向量添加元素时,为什么必须使用make_pair进行处理

int i = _start.first;
int j = _start.second;
openList.push_back(std::make_pair(0.0, std::make_pair(i, j)));

为什么我不能仅仅通过添加值来做到这一点?

openList.push_back(0.0f, (i, j));

3 个答案:

答案 0 :(得分:1)

您可以使用:

openList.push_back({0.0f, {i, j}});

答案 1 :(得分:1)

您可以这样做:

openList.emplace_back(0.0f, coords{i, j});

答案 2 :(得分:0)

可以,但是您需要使用正确的语法。例如

#include <iostream>
#include <utility>
#include <vector>

typedef std::pair<int, int> coords;
typedef std::pair<float, coords> fcoords;

int main() 
{
    std::vector<fcoords> v;

    v.push_back( { 1.0f, { 2, 3 } } );

    decltype( auto ) front = v.front();

    std::cout << front.first << ": " 
              << front.second.first << ", " 
              << front.second.second << '\n';

    return 0;
}

程序输出为

1: 2, 3

至此声明

openList.push_back(0.0f, (i, j));

然后使用具有两个参数而不是一个参数的成员函数push_back的调用。第一个参数是浮点文字0.0f,第二个参数是带有逗号运算符(i, j)的表达式,其结果为j