gpt4 book ai didi

c++ - 为什么找不到这个 std::map 键?

转载 作者:搜寻专家 更新时间:2023-10-31 00:29:44 26 4
gpt4 key购买 nike

我问了一个similar question以前和现在我有一个相关的问题。下面,输出“未找到”,打印的元素数量为 2。

positions.emplace(r,q); 行明明插入了元素, map 大小也正确,为什么找不到rp 找到(未在此示例中记录)。

#include <map>
#include <iostream>

struct screenPoint {
float x = 0, y = 0;
screenPoint(float x_, float y_): x{x_}, y{y_}{}
};

bool operator<(const screenPoint& left, const screenPoint& right){
return left.x<right.x||left.y<right.y;
}

std::map<screenPoint, screenPoint> positions;

int main(int argc, const char * argv[]) {

auto p = screenPoint(593,271.5);
auto q = screenPoint(595.5,269.5);
auto r = screenPoint(599,267);
positions.emplace(p,q);
positions.emplace(r,q);

auto f = positions.find(r);

if (f == positions.end()){
std::cout << "not found";
} else {
std::cout << "found";
}

std::cout << std::endl;

std::cout << "number elements: " << positions.size() << "\n";
return 0;
}

最佳答案

你的 operator<不是严格弱排序。例如,您同时拥有 p<qq<p .这意味着任何 map 的未定义行为操作。

一种提供有效 operator< 的方法,忽略 NaN,将是:

bool operator<(const screenPoint& left, const screenPoint& right) {
return left.x < right.x ||
( left.x == right.x && left.y < right.y );
}

关于c++ - 为什么找不到这个 std::map 键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39796763/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com