目录
1、map自定义键值注意事项
在自定义结构体中重载operator<()操作符
class package
{
public:
string src_ip;
int src_port;
string des_ip;
int des_port;
//初始化
package(string src_ip, int src_port, string des_ip, int des_port) :
src_ip(src_ip), src_port(src_port), des_ip(des_ip), des_port(des_port)
{};
//重载 operator<
bool operator<(const package &pkg) const //注意这里的两个const
{
if (src_ip < pkg.src_ip || (src_ip == pkg.src_ip && src_port < pkg.src_port)
||(src_ip == pkg.src_ip && src_port == pkg.src_port && des_ip < pkg.des_ip)
||(src_ip == pkg.src_ip && src_port == pkg.src_port && des_ip == pkg.des_ip
&& des_port < pkg.des_port))
{
return true;
}
else
{
return false;
}
}
};
2、例题
2.1、题目
2.2、代码
int main()
{
int n;
cin >> n;
vector<package>packages;
map<package, int>mp;
vector<int>res;
for (int i = 0; i < n; i++)
{
string src_ip, des_ip;
int src_port, des_port;
cin >> src_ip >> src_port >> des_ip >> des_port;
package tmp(src_ip, src_port, des_ip, des_port);
packages.push_back(tmp);
}
for (int i = 0; i < n; i++)
{
auto it = mp.find(packages[i]);
if (it == mp.end()) //插入
{
int index = mp.size() + 1;
mp[packages[i]] = index;
}
res.push_back(mp[packages[i]]);
}
for (int i = 0; i < n; i++)
{
cout << res[i] << endl;
}
return 0;
}