gpt4 book ai didi

c++ - map /对中的运算符重载

转载 作者:行者123 更新时间:2023-11-28 02:41:30 26 4
gpt4 key购买 nike

我试图理解在 STL 类模板的情况下使用的运算符重载,例如:map 或 pair。

让我向您介绍一下我的代码:

#include <iostream> 
#include <iomanip> // left, setw
#include <string>
#include <map>
#include <utility> // pair
#include <algorithm> // count if
using namespace std;

typedef pair <string, int> Emp;
typedef map <string, Emp> MAP;

class Zakr{
int min, max;
public:
Zakr(int min, int max): min(min), max(max){}

bool operator()(const pair<const string, Emp> &p) const{
int wage = p.second.second;
return (min < wage) && (wage < max);
}
};

void print (const MAP& m) {
MAP::const_iterator it, fin = m.end();

for(it = m.begin(); it != fin; it++)
cout << "Key: " << left << setw(7) << it -> first
<< "Name: " << setw(10) << it->second.first
<< "Wage: " << it->second.second << endl;
}

int main(void){
MAP emp;

MAP object;

emp["John"] = Emp("John K.", 1900);
emp["Tania"] = Emp("Tania L.", 1900);
emp["Jeremy"] = Emp("Jeremy C", 2100);
emp["Susie"] = Emp("Susie W.", 3100);
emp["Toto"] = Emp("Toto T.", 9900);
emp["Adrian"] = Emp("Adrian N.", 1600);
emp["Germy"] = Emp("Germy P.", 2600);

print(emp);

int mn = 0, mx = 2000;
int how_much = count_if(emp.begin(), emp.end(), Zakr(mn, mx));

cout << how_much << " earn from"
<< mn << " to " << mx << endl;
}

我正在努力理解一些位,尤其是一个特别的位,即:

class Zakr{
int min, max;
public:
Zakr(int min, int max): min(min), max(max){}

bool operator()(const pair<const string, Emp> &p) const{
int wage = p.second.second;
return (min < wage) && (wage < max);
}
};

所以我构建了名为 Zakr 的类,这样我就可以使用它来确定 count_if 语句中的仿函数。

我说得对吗?

我初始化私有(private)字段 min 和 max 以在构造函数中使用它们,而不是让已重载的运算符可以根据它们自己的值返回 bool 值。最困难的部分是理解 bool 运算符重载。

 bool operator()(const pair<const string, Emp> &p) const{
int wage = p.second.second;

我到底为什么需要 1* 制作一对无用的字符串值和 EMP?

因为我感兴趣的所有内容都存储在 EMP 中,即:将在重载中使用的 int 值存储在 Emp 中。

为什么我不能像这样访问存储在 Emp 中的 int:

bool operator(Emp &p)
{
int wage = p.second;
return (min < wage) && (wage < max);
}

为什么我需要像这样制作另一对:(const pair &p),如果我感兴趣的只是存储在名为 Emp 的对中的值。

为什么我需要用上述命名对的第一个无用元素制作另一对:string。我不打算使用它,那么为什么需要它来编译代码?

我确实尽了最大努力尽可能清楚地解释我的疑虑。希望有人能理解这篇相当长的文章。

干杯!

最佳答案

这是因为 std::map 上的迭代器为每个元素返回一个 std::pair。对中的第一项是映射键,第二项是映射值。查看 documentation for std::map 中的 value_type .

This question有一些关于如何仅在 map 值上获取迭代器的答案。

关于c++ - map /对中的运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25825263/

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