gpt4 book ai didi

c++ - C++ 中的 3 个键有序映射

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:29:40 26 4
gpt4 key购买 nike

我有一个名为 Vector3 的 3 分量 vector 结构,其中 3 个 int 代表 X、Y 和 Z。对于每个 3D 点(我有或多或少 200-300 个不同的3D 点)我有一个 string

我想做的是有一个数据结构来检查该位置是否有 string。我想使用 std::map,但我编写了这段代码但效果不佳:

它的错误是它只运行一次 else 部分,并不断返回相同的 string

我的 Vector3 类是 Ogre3D 中的类:http://www.ogre3d.org/docs/api/html/classOgre_1_1Vector3.html

String WorldGenerator::createPlatformBorder(Vector3 size)
{
static std::map<Vector3, String> generatedBorders;

if (generatedBorders.find(size) != generatedBorders.end())
{
return generatedBorders[size];
}
else
{
String blockName = requestNewPlatformBorderName();
generatedBorders.insert(std::pair<Vector3, String>(size, blockName));
// some logic
return blockName;
}
}

你能帮帮我吗?

请注意,requestNewPlatformBorderName() 函数运行良好,因此不存在错误。这是它的代码:

String requestNewPlatformBorderName()
{
static int counter = 0;
return StringConverter::toString(++counter) + "-platform-border";
}

最佳答案

你有两个选择:

  1. 定义<类运算符 Vector3 , 或
  2. 创建一个比较 2 Vector3 的函数s 并在声明 map 时指定它。当作为键的类没有自然的(直观的、常见的、默认的等)排序,或者当你想通过不同于它的标准进行排序/映射时,这一个特别有用。恕我直言,第一个是您示例中的情况,所以我倾向于它。

1。 <运营商

bool operator < (const Vector3 &that) const {
if( this.x != that.x )
return this.x < that.x ;
else if( this.y != that.y )
return this.y < that.y ;
else if( this.z != that.z )
return this.z < that.z ;
else
return false ;
}

2。比较功能

class Vector3Comparator {
public:
bool operator () (const Vector3 &a,const Vector3 &b) const {
if( a.x != b.x )
return a.x < b.x ;
else if( a.y != b.y )
return a.y < b.y ;
else if( a.z != b.z )
return a.z < b.z ;
else
return false ;
}
}
...
static std::map<Vector3,string,Vector3Comparator> generatedBorders;

关于c++ - C++ 中的 3 个键有序映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18457193/

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