在结构内部使用比较器功能需要什么?

What is the need of using comparator function inside structure?

我无法理解 struct comp 和 bool operator() 函数内部发生了什么。如果我写,地图和迭代器的行为如何 map<int,int,comp> ?

你得到堆栈溢出,因为你的 setter 递归调用你的 setter 递归调用你的 setter 递归调用你的 setter......

你需要为此设置一个支持字段,如下所示:

public class Student {
    private int _sid;
    public int Sid
    {
        set 
        {
            if (value <= 0) Console.WriteLine("Id must be positive.");
            else _sid = value;
        }
        get { return _sid; }
    }

您的属性正在递归调用自身。带上你的Sid属性

public int Sid
{
    set 
    {
        if (Sid <= 0) Console.WriteLine("Id must be positive."); // here, also validation wrong--use value
        else Sid = value; // here
    }
    get { return Sid; } //here
}

在我标记的地方,getter 和 setter 再次调用 Sid。这导致它们被递归调用,直到堆栈溢出。如果您想在 属性 中执行验证,则需要使用显式支持字段:

private int _sid;     
public int Sid
{
    set 
    {
        if (value <= 0) Console.WriteLine("Id must be positive.");
        else _sid = value;
    }
    get { return _sid; }
}

您还应该考虑在验证失败时在 setter 中采取措施。简单地输出到控制台是意外。用户没有任何迹象表明(通过代码)出现了问题。考虑改为抛出异常。

private int _sid;     
public int Sid
{
    set 
    {
        if (value <= 0)
           throw new InvalidOperationException("Id must be positive.");
        _sid = value;
    }
    get => _sid;
}