如何将对象类型转换为 int c++
Posted
技术标签:
【中文标题】如何将对象类型转换为 int c++【英文标题】:how to convert object type to int c++ 【发布时间】:2021-04-06 08:52:09 【问题描述】:我正在尝试使用两个类创建一种记录列表。一个类用于输入值,而另一个类用于收集、组织和打印它们。这是我的代码:
class enterrecords
public:
string name;
int age;
string birthmonth;
enterrecords()
name = "";
age = 0;
birthmonth = "";
enterrecords(string n, int a, string b)
name = n;
age = a;
birthmonth = b;
;
class records
public:
vector <enterrecords> list;
records()
records(enterrecords s)
void addtolist(const enterrecords s)
this->list.push_back(s);
void print()
for (const auto& it : this->list)
cout << it.name << " " << it.age << " " << it.birthmonth << endl;
;
int main()
enterrecords s1;
enterrecords s2;
enterrecords s3;
records c1;
s1 = enterrecords("john", 21, "jan");
s2 = enterrecords("male", 25, "feb");
s3 = enterrecords("rob", 23, "oct");
c1.addtolist(s1);
c1.addtolist(s2);
c1.addtolist(s3);
c1.print();
这是这个程序的输出:
约翰 1 月 21 日
男性 2 月 25 日
10 月 23 日抢劫
最后,我希望能够按年龄从最小到最大组织这个列表。所以在重新排列它们之后,这就是它的样子:
约翰 1 月 21 日
10 月 23 日抢劫
男性 2 月 25 日
我尝试按常规对它们进行排序,但问题是,“21”、“23”和“25”不是 int 值而是对象值。有什么方法可以将它们转换为 int 以便我可以进行一些操作并对它们进行排序?谢谢。
【问题讨论】:
不确定您所说的“对象值”是什么意思。enterrecords::age
是一个整数。要按年龄对向量进行排序,请将std::sort
与接受两个enterrecords
对象的引用的比较器一起使用,如果第一个年龄小于第二个,则返回true。
谢谢先生,有什么办法可以通过代码来证明吗?
【参考方案1】:
std::sort 通常用于对一系列对象进行排序。要么该类具有自然顺序,然后您为它创建一个 operator
示例基于您的代码(未编译/测试),不考虑月份,因为您使示例变得更加困难:
std::sort(c1.list.begin(), c1.list.end(), [](const auto& r1, const auto& r2) return r1.age < r2.age; );
【讨论】:
所以如果我使用它,它会重新排列列表本身,或者它只会说 r1.age 排序函数使用比较器对列表进行排序。如果 r1 小于 r2,比较器需要返回 true,否则返回 false。 查看链接的 std::sort 页面了解更多信息。以上是关于如何将对象类型转换为 int c++的主要内容,如果未能解决你的问题,请参考以下文章
C++中如何将一个字符串(string类型的)映射(转换)到枚举值(enum)