获取两个数组之间的差异
Get difference between two array
我有 2 个字符串表,我想显示两个表之间的差异。
例:
Tab1 = "user1, user2, user3, user4"
Tab2 = "user3, user4, user2"
这种情况的不同之处在于缺少user 1
。
我想知道是否有一个函数允许您在标准库或Qt中执行此操作。
提前谢谢你。
您需要的是将已排序v1
中未在排序v2
中找到的元素复制到diff
的std::set_difference
。如前所述,您应该首先对向量进行排序,然后搜索差异。
#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
int main() {
std::vector<std::string> v1 { "user1", "user2", "user3", "user4" };
std::vector<std::string> v2 { "user3", "user4", "user2" };
std::vector<std::string> diff;
std::sort(v1.begin(), v1.end());
std::sort(v2.begin(), v2.end());
std::set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(),
std::inserter(diff, diff.begin()));
for (auto const& i : diff)
std::cout << i << std::endl;
}
如果您的字符串表存储为您描述的字符串,即
Tab1 = "user1, user2, user3, user4"
Tab2 = "user3, user4, user2"
然后,您可以使用正则表达式首先找出 Tab1 中的用户并将其存储在一个集合中。 在 Tab2 中搜索用户时,您可以检查该用户是否已存在于集中,如果是,则从集中删除该用户,如果不是,则将该用户插入到集中。
法典:
#include <iostream>
#include <string>
#include <regex>
#include <set>
using namespace std;
ostream& operator<< (ostream& out, const set<string>& S)
{
for (const string& s : S)
out << s << endl;
return out;
}
int main()
{
string Tab1 = "user1, user2, user3, user4";
string Tab2 = "user3, user4, user2";
regex reg("user[0-9]{1,}");
set<string> S;
sregex_iterator pos1(Tab1.cbegin(), Tab1.cend(), reg);
sregex_iterator end1;
while (pos1 != end1)
{
S.insert(pos1->str());
++pos1;
}
sregex_iterator pos2(Tab2.cbegin(), Tab2.cend(), reg);
sregex_iterator end2;
while (pos2 != end2)
{
string temp = pos2->str();
if (S.find(temp) != S.cend())
S.erase(temp);
else
S.insert(temp);
++pos2;
}
cout << S << endl;
}
如果您向表提供带有 std::set(或 std::unordered_set(的表,则可以降低计算复杂性。然后无需对表格进行排序(这不是便宜的操作(。我修改 胡桃夹子用std::unordered_set
回答:
#include <iostream>
#include <unordered_set>
#include <vector>
int main()
{
std::unordered_set<std::string> set1{ "user1", "user2", "user3", "user4" };
std::unordered_set<std::string> set2{ "user3", "user4", "user2", "user8" };
std::vector<std::string> diff;
for (const auto& s : set1)
{
auto it = set2.find(s);
if (it == set2.cend())
{
diff.emplace_back(s);
}
}
for (const auto& s : set2)
{
auto it = set1.find(s);
if (it == set1.cend())
{
diff.emplace_back(s);
}
}
for (const auto& s : diff)
std::cout << s.c_str() << std::endl;
}
相关文章:
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- 在 Python 和 c++ 2d 数组初始化之间.这是怎麽?为什么呢?
- 介于 [固定数组] 和 [带内存分配的指针] 之间的性能
- 动态分配的数组和静态数组之间的区别
- 删除[i] 数组和删除数组 [i] 之间的区别
- 当数组位于两个循环之间时,您可以调用数组的 void 函数吗?
- 处理数组时make_unique和make_shared之间的差异
- 在两个结构之间共享数组
- C++堆栈中数组之间的间隙
- 类型测试对象的动态数组的这两个声明之间的区别?
- 如何计算大小为 1000 x 1000 的 2D 数组中 2 个元素之间的步幅?C++
- sizeof(空结构)和sizeof(带有空数组的结构)之间的区别?
- 尝试查找数组中点之间的最小距离时的随机垃圾输出
- 如何在带有 mbed 的 nucleo f446re 之间通过带有 UARTSerial 类的 USB 发送字节数组?
- 在给定的整数数组中,可以找到在给定位置之间分类数组的整数之和
- 这两个代码之间的差异(为什么我的数组也有额外的空间,即使我限制了它)
- 使用STD :: String和字符数组之间的选择
- 如何在不复制数据的情况下在平面数组和多维数组之间进行转换?
- 在函数之间传递相同的数组
- 如果 strlen 在 char 数组之间遇到空格,它会怎么做