给定以下结构:
struct four_points {
uint32_t a, b, c, d;
}
Run Code Online (Sandbox Code Playgroud)
比较两个这样的结构并返回匹配的变量数(在任何位置)的绝对最快方法是什么?
例如:
four_points s1 = {0, 1, 2, 3};
four_points s2 = {1, 2, 3, 4};
Run Code Online (Sandbox Code Playgroud)
我正在寻找3的结果,因为两个结构之间有三个数字匹配.但是,考虑到以下因素:
four_points s1 = {1, 0, 2, 0};
four_points s2 = {0, 1, 9, 7};
Run Code Online (Sandbox Code Playgroud)
然后我期望结果只有2,因为在两个结构之间只有两个变量匹配(尽管第一个中有两个零).
我已经找到了一些用于执行比较的基本系统,但这在短时间内将被称为几百万次并且需要相对较快.我目前最好的尝试是使用排序网络对任一输入的所有四个值进行排序,然后循环排序值并保持相等值的计数,相应地提前任一输入的当前索引.
是否有任何类型的技术可以比排序和迭代更好地执行?
是否有任何已知方法可以快速有效地确定 3D 点是否位于已知大小的柏拉图体积内?
这对于立方体(六面体)或圆(椭圆体)来说似乎很容易。我似乎无法弄清楚四面体、八面体、十二面体或二十面体。我猜可能可以将形状分解成几个子实体,然后检查每个子实体,但如果可能的话,我想避免使用任何类型的迭代求解器。
假设我有以下代码:
std::vector<int> test;
test.push_back(10);
test.push_back(20);
test.push_back(30);
printf("%d\n", *(test.begin() - 1));
Run Code Online (Sandbox Code Playgroud)
test.begin()保证返回之前的迭代器是什么?它总是0吗?或者这是未定义的行为?