C++ 使用std::min_元素编译错误

C++ 使用std::min_元素编译错误,c++,stl,C++,Stl,当我使用std::min_元素时,我一直在努力解决C2440编译错误: struct compare_x_coordinate { bool operator() (Geocoordinatefloat i,Geocoordinatefloat j) { return i.x_<j.x_; } } mycompare; vector<Geocoordinatefloat>::iterator it_min; vector<Geocoordinatefloat>

当我使用std::min_元素时,我一直在努力解决C2440编译错误:

struct compare_x_coordinate 
{
  bool operator() (Geocoordinatefloat i,Geocoordinatefloat j) { return i.x_<j.x_; }
} mycompare;

vector<Geocoordinatefloat>::iterator it_min;
vector<Geocoordinatefloat> ptArray;
ptArray.push_back(...)
ptArray.push_back(...)
...

it_min = std::min_element(ptArray.begin(),ptArray.end(),mycompare); // Line 475 Compiling error C2440

std::min_element(ptArray.begin(),ptArray.end(),mycompare);           // Right
结构比较x坐标 {
bool operator()(geocordinatefloat i,geocordinatefloat j){return i.x_up>您不需要类,您需要将参数绑定到常量引用。类似于这样:

template <typename T>
bool compare_x(Geocoordinate<T> const & a, Geocoordinate<T> const & b)
{
    return a.x_ < b.x_;
}
模板
布尔比较x(地理坐标常数和a、地理坐标常数和b)
{
返回a.x
用法:

std::vector<Geocoordinatefloat>::iterator it_min =
    std::min_element(ptArray.begin(), ptArray.end(), compare_x<float>);
std::vector::iterator it\u min=
std::min_元素(ptArray.begin()、ptArray.end()、compare_x);

您不需要类,您需要将参数绑定到常量引用。类似如下:

template <typename T>
bool compare_x(Geocoordinate<T> const & a, Geocoordinate<T> const & b)
{
    return a.x_ < b.x_;
}
模板
布尔比较x(地理坐标常数和a、地理坐标常数和b)
{
返回a.x
用法:

std::vector<Geocoordinatefloat>::iterator it_min =
    std::min_element(ptArray.begin(), ptArray.end(), compare_x<float>);
std::vector::iterator it\u min=
std::min_元素(ptArray.begin()、ptArray.end()、compare_x);

问题在于
ptArray
const
。这意味着
begin()
end()
返回
const\u迭代器
;将它们作为参数的
min\u元素的专门化也是如此


const\u迭代器
无法分配给类型为
iterator
的变量,因此您需要将
it\u min
的类型更改为
PointArray::const\u迭代器

问题是
ptArray
const
。这意味着
开始()
结束()
return
const_iterator
;将它们作为参数的
min_元素的专门化也是如此


常量迭代器
无法分配给类型为
迭代器
的变量,因此您需要将
it\u min
的类型更改为
PointArray::const\u迭代器

,谢谢。但这也会给我造成编译问题。主要问题是如果我将变量分配给std::min\u元素(ptArray.begin(),ptArray.end()),mycompare),它总是失败。@feelfree:你忘了取消对迭代器的引用了吗?@feelfree:哦,好吧,的确-如果你只有一个常量引用或指针,那么结果类型必须是
常量迭代器
。当然,这样就不能分配给结果迭代器了。谢谢。但这也给我带来了编译问题。主要问题是如果我为std::min_元素(ptArray.begin()、ptArray.end()、mycompare)分配了一个变量,它总是失败。@feelfree:你忘了取消对迭代器的引用吗?@feelfree:哦,好的,的确如此-如果你只有一个常量引用或指针,那么结果类型必须是一个
常量迭代器。当然,这样就不能分配给结果迭代器。
std::vector<Geocoordinatefloat>::iterator it_min =
    std::min_element(ptArray.begin(), ptArray.end(), compare_x<float>);