C++ 在一行中初始化成对向量

C++ 在一行中初始化成对向量,c++,c++11,vector,initialization,std-pair,C++,C++11,Vector,Initialization,Std Pair,我想用k个对象初始化std::pair的std::vector,值对如下所示 以下是我的尝试: // int k std::vector <std::pair<Point::FT, int> > v(k, (std::numeric_limits<FT>::max(), -1)); 错误: usr/include/c++/4.6/bits/stl_vector.h: In member function ‘void std::vector<T,

我想用k个对象初始化std::pair的std::vector,值对如下所示

以下是我的尝试:

// int k
std::vector <std::pair<Point::FT, int> >
    v(k, (std::numeric_limits<FT>::max(), -1));
错误:

usr/include/c++/4.6/bits/stl_vector.h: In member function ‘void std::vector<T, Allocator>::_M_initialize_dispatch(_Integer, _Integer, std::__true_type) [with _Integer = int, _Tp = std::pair<float, int>, _Alloc = std::allocator<std::pair<float, int> >]’:
/usr/include/c++/4.6/bits/stl_vector.h:340:4:   instantiated from ‘std::vector<T, Allocator>::vector(_InputIterator, _InputIterator, const allocator_type&) [with _InputIterator = int, _Tp = std::pair<float, int>, _Alloc = std::allocator<std::pair<float, int> >, std::vector<T, Allocator>::allocator_type = std::allocator<std::pair<float, int> >]’
../Random_kd_tree.h:139:50:   instantiated from ‘void Random_kd_tree<DivisionSpace, Tree>::search_nn(std::vector<float>&, int, std::vector<std::pair<float, int> >&) [with DivisionSpace = Division_Euclidean_space, Tree = RKD<Division_Euclidean_space>]’
../main.cpp:51:30:   instantiated from here
/usr/include/c++/4.6/bits/stl_vector.h:1080:4: error: no matching function for call to ‘std::vector<std::pair<float, int> >::_M_fill_initialize(std::vector<std::pair<float, int> >::size_type, int&)’
/usr/include/c++/4.6/bits/stl_vector.h:1080:4: note: candidate is:
/usr/include/c++/4.6/bits/stl_vector.h:1122:7: note: void std::vector<T, Allocator>::_M_fill_initialize(std::vector<T, Allocator>::size_type, const value_type&) [with _Tp = std::pair<float, int>, _Alloc = std::allocator<std::pair<float, int> >, std::vector<T, Allocator>::size_type = unsigned int, std::vector<T, Allocator>::value_type = std::pair<float, int>]
/usr/include/c++/4.6/bits/stl_vector.h:1122:7: note:   no known conversion for argument 2 from ‘int’ to ‘const value_type& {aka const std::pair<float, int>&}’
假设Point::FT是数值_limits::max有效的对象

std::vector <std::pair<Point::FT, int>>
        v(k, std::make_pair(std::numeric_limits<FT>::max(), -1));
您可以在构造函数参数周围切换到{}

std::vector<std::pair<Point::FT, int>> v{k, {std::numeric_limits<FT>::max(), -1}};

看到它运行了吗

您在一个地方使用Point::FT,在另一个地方使用裸FT-您是想在std::numeric_limits模板中使用Point::FT吗?好的Point@cdhowie。可能在文件中使用了Point::FT,但没有使用它:哦,是的!这就是我想做的,但是用括号代替了@G.萨马拉斯:从C++11开始,一直使用{}是个好主意-有时额外的东西会起作用/歧义会被避免,它也会处理所有旧的情况…我接受这个答案,因为它更现代。虽然它让我损失了一些声誉,但我想相信未来的用户会对它感到高兴