在结构内部使用比较器功能需要什么?
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;
}
我无法理解 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;
}