我已经用过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));
答案 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
。