我有一套Vec3b來保存可能的RGB像素值。集合的錯誤行爲<Vec3b>
std::set<cv::Vec3b> used_colors;
但是行爲怪異:
used_colors.insert(cv::Vec3b(100, 255, 255));
// this returns 1 although (100, 0, 0) is NOT in the set
used_colors.count(cv::Vec3b(100, 0, 0));
的值(100,0,0)被發現,因爲由100其他值在已經插入集合。其他值(如80,0,0)無法找到。這顯然是錯誤的怪異行爲。
我實現了<對比操作是這樣的:
bool operator <(const cv::Vec3b &a, const cv::Vec3b &b) {
if(a[0] < b[0])
return true;
if(a[0] > b[0]);
return false;
if(a[1] < b[1])
return true;
if(a[1] > b[1]);
return false;
if(a[2] < b[2])
return true;
if(a[2] > b[2]);
return false;
return false;
}
寫一些測試代碼來獨立運用'operator <'。一旦它正常工作,移動到更復雜的數據結構。這被稱爲「單元測試」,它是創建可靠代碼的基本工具。 – 2013-05-12 10:50:01