我正在尝试将struct
插入ITK课程中的set
。
结构在class
内定义如下:
struct PixType {
IndexType Index;
PixelType Value;
bool operator <(const PixType&rhs) {
return (double)Value < (double)rhs.Value;
}
};
其中IndexType
和PixelType
是图片中像素的索引和值:
typedef typename TImage::IndexType IndexType;
typedef typename TImage::PixelType PixelType;
然而,当我创建我的集合并尝试插入元素时......
// Create set
std::set< PixType > MySet;
// Create something to insert into set
PixType LeftPixel;
LeftPixel.Index = qualIt.GetIndex( left );
LeftPixel.Value = qualIt.GetPixel( left );
// Try to insert into set
MySet.insert( LeftPixel ); // error: invalid operands to binary expression
...我收到invalid operands to binary expression
错误。我还尝试inline
结构之外的<
函数,但是我得到一个错误,即函数不能在这里定义(在类的方法中)。
如果它有帮助,这里是我想要做的更大的图片。我想在图像中存储像素列表(它们的索引和它们的值)。我希望能够快速找到具有最小值的像素,并检索该像素的索引。经过一些阅读后,似乎包含一个包含索引和值的结构并且可以根据该值进行比较的集合将是最有效的选项。我以前通过维护vector
索引和值以及使用find
和min_element
获得了我需要的功能,但是由于向量太大,我遇到了效率问题。 / p>
答案 0 :(得分:5)
运算符需要是常量,以便它可以应用于集合的常量元素:
bool operator <(const PixType&rhs) const
^^^^^
或者,您可以将其实现为非成员:
bool operator <(const PixType&lhs, const PixType&rhs)