C++ 我在一个循环中,会不断收到如下格式字符串,一个序号一个IP对应一个MAC,序号是累加的,不会重复,
如果IP和MAC全部有重复就丢弃,否则重新设置序号,并放入一个容器?结构或数组变量中?
这个怎么写,比较简单?
数据是实时得到的,非固定(当然数量不多,差不多10几组)
序号:1
aaa ="192.168.1.2 " //IP
bbb ="F0-DE-F1-DF-F5-E9" //MAC
序号:2 //需要保留
aaa ="192.168.1.3 " //
bbb ="F0-DE-F1-DF-F5-E9" //
序号:3 //全部与序号1重复,丢弃
aaa ="192.168.1.2 " //
bbb ="F0-DE-F1-DF-F5-E9" //
序号:4//需要保留,重新排号(序号变 3)
aaa ="192.168.1.6 " //
bbb ="F0-DE-F1-DF-F5-E2" //
序号:5 //全部与与序号2重复,丢弃
aaa ="192.168.1.3 " //
bbb ="F0-DE-F1-DF-F5-E9" //
序号:6 //需要重新排号 (序号变 4)
aaa ="192.168.1.2 "
bbb ="F0-DE-F1-DF-F5-E2"
//反正只要IP和MAC有一个不重复的,就保留!
比如以上结果是4组数据:
a[1].序号:1
a[1].ip ="192.168.1.2 " //IP
a[1].mac ="F0-DE-F1-DF-F5-E9" //MAC
a[2].序号:2
a[2].ip ="192.168.1.3 " //IP
a[2].mac ="F0-DE-F1-DF-F5-E9" //MAC
a[3].序号:3
a[3].ip ="192.168.1.6 " //IP
a[3].mac ="F0-DE-F1-DF-F5-E2" //MAC
a[4].序号:4
a[4].ip ="192.168.1.2 " //IP
a[4].mac ="F0-DE-F1-DF-F5-E2" //MAC
该回答引用GPTᴼᴾᴱᴺᴬᴵ
可以使用一个数组来存储收到的数据,并在接收新数据时,判断其IP和MAC是否与之前的数据重复。如果不重复,就将其存储到数组中。如果重复,则丢弃该数据。
以下是一个示例代码,可以根据需要进行修改和调整:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
struct Data
{
int seq; // 序号
std::string ip; // IP地址
std::string mac; // MAC地址
};
int main()
{
std::vector<Data> data_list; // 存储数据的数组
int seq = 0; // 序号
// 循环接收数据
while (true)
{
std::string ip, mac;
std::cin >> ip >> mac;
// 判断是否重复
bool is_duplicate = false;
for (const auto& data : data_list)
{
if (data.ip == ip && data.mac == mac)
{
is_duplicate = true;
break;
}
}
// 如果不重复,则存储数据
if (!is_duplicate)
{
++seq;
data_list.push_back({seq, ip, mac});
}
}
return 0;
}
当收到新的数据时,会遍历数组中的所有数据,并逐一比较IP和MAC是否与新数据重复。如果有任何一个数据与新数据重复,则说明该数据已经存在,不需要重复存储。如果遍历完整个数组都没有找到重复的数据,则说明新数据不重复,可以将其存储到数组中。
std::unordered_map<std::string, std::int> umap