C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 一个结构中多点的运算符大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个存储两个应该可以互换的点的结构.

struct Edge
{
    unsigned short firsTindex;
    unsigned short secondIndex;
    Edge(unsigned short firsTindex,unsigned short secondIndeX) :
        firsTindex(firsTindeX),secondIndex(secondIndeX) {}
};

operator ==方法应该如下(使它们可以互换)

bool operator == (const Edge& e2) const
{
    return 
        first == e2.first && second == e2.second || 
        first == e2.second && second == e2.first;
}

我期待创建一个运算符<和运算符>方法,以便在std :: map中使用struct

我尝试了以下(使用乘法)但它不起作用,因为在许多情况下,不同的边返回相同的值

bool operator < (const Edge& e2) const
{
    return first * second < e2.first * e2.second;
}

我想使用的代码如下:

std::map<Edge,unsigned int> edgePoints;
Edge e1(0,1);
Edge e2(1,2);
Edge e3(2,0);

edgePoints[e1] = 2;
edgePoints[e2] = 0;
edgePoints[e3] = 1;

代码不适用于我的操作符<方法因为0 * 1 == 2 * 0所以当我调用edgePoints [e3]时,地图返回2 有没有人知道一个操作符<和运算符>我可以使用的方法,甚至是一些映射边缘的方法,以便使用std :: map

解决方法

我会以这种方式存储边的索引,小的索引总是第一个索引.看起来内部表示与您的应用程序无关.您不需要operator == for maps.这是示例结构:

struct Edge
{
    typedef unsigned short Idx; // prefer strong typedef cf boost
    Edge(Idx a,Idx b) 
    :
        firsTindex(std::min(a,b)),secondIndex(std::max(a,b))
    {}

    Idx firsTindex;
    Idx secondIndex;

    bool operator<(Edge const & other)
    {
        if (firsTindex != other.firsTindeX) 
            return firsTindex < other.firsTindex;
        return secondIndex < other.secondIndex;
    }
}; // Edge

如果你想让你的实现更好,一些小的建议:

>首选std :: array< unsigned short,2>在单独的变量firsTindex和secondIndex上.这样做可以迭代索引.
>如果您正在使用数组,则可以缩短运算符<使用std::lexicographical_compare.

大佬总结

以上是大佬教程为你收集整理的c – 一个结构中多点的运算符全部内容,希望文章能够帮你解决c – 一个结构中多点的运算符所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。