多个向量的字符串操作
string manipulation of multiple vectors
我有三个向量
vector<string> usersA = {"a15_afd","a19_afd","a20_afd"}
vector<string> usersB = {"b15_afd","b26_afd","b98_afd"}
vector<string> usersC = {"c94_afd","c92_afd","c99_afd"}
我想检查字符 a 后面的数字是否存在于其他向量中。示例:用户A索引0,是a15_254,我想检查其他向量用户B或用户C中是否存在15。
同样,我必须检查 B 和 C 是否存在于其他向量中的数字。到目前为止,我做了什么。将数字存储到特定向量中
vector<string> usersANumber; // it has the numbers of usersA {"15","19","20"}
vector<string> usersBNumber; // it has the numbers of usersB {"15","26","98"}
vector<string> usersCNumber; // it has the numbers of usersC {"94","92","99"}
我有三个 for 循环 第一个循环我检查用户数量是否在其他两个向量中, 第二个循环我检查用户数BNumber是否存在于其他两个向量中, 第三个循环 I 检查用户数 CNumber 是否存在于其他两个向量中
我觉得这效率不高。 有没有其他方法可以做到这一点
将数字存储到新向量中后,您只需对这些向量进行排序,然后使用二叉搜索算法搜索重复的项目:
vector<string> usersA = { "15", "19", "20" };
vector<string> usersB = { "15", "26", "98" };
vector<string> usersC = { "94", "92", "99" };
sort(usersA.begin(), usersA.end());
sort(usersB.begin(), usersB.end());
sort(usersC.begin(), usersC.end());
searchForDuplicateItems(usersA, usersB);
searchForDuplicateItems(usersA, usersC);
searchForDuplicateItems(usersB, usersC);
注意,你只需要比较一次向量,即遍历向量用户A的所有项目后,检查它们是否存在于向量用户B中,不需要遍历向量用户B的所有项来检查它们是否存在于向量用户A中。
搜索重复项函数实现如下所示:
void searchForDuplicateItems(vector<string> &v1, vector<string> &v2)
{
for (int i = 0; i < v1.size(); i++)
{
if (vectorContainsItem(v2, v1[i]))
{
// duplicate item found
}
}
}
下面是vectorContainsItem函数的实现,该函数在内部使用二叉搜索算法来提高效率:
bool vectorContainsItem(vector<string> &v, string &item)
{
int left = 0;
int right = (int) v.size() - 1;
int mid = (right + left) / 2;
while (left <= right)
{
mid = (right + left) / 2;
if (v[mid].compare(item) == 0)
return true;
else if (v[mid].compare(item) < 0)
left = mid + 1;
else if (v[mid].compare(item) > 0)
right = mid - 1;
}
return false;
}
相关文章:
- 字符串操作 - 字符计数
- 字符串操作主题消息
- 在MySql中使用字符串操作函数有什么问题
- 如何在没有外部库的情况下使用C++03约束执行基于正则表达式的字符串操作
- 如何使用 Win32 WCHAR 执行字符串操作
- 基本字符串操作有问题 [c++, Visual Studio 2013]
- 字符串操作 C++ 在字符串之后存储整数
- 将字符数复制到新字符串位置的字符串操作,例如 S[0]
- C 比较字符串操作速度
- C++子字符串/字符串操作
- 高级文件和字符串操作
- 使用字符串操作截断整数
- C#和C++中字符串操作的不同基准测试
- 是否有不涉及 I/O 流的 mingw 库原生的就地字符串操作方法
- 如何使用字符串操作来获取输入文本文件的某些部分
- c++中的字符串操作
- 字符串操作性能问题
- 字符串操作,完全不知所措
- std::C++生成器 6 上的字符串操作错误
- 在此字符串操作代码中获取out_of_range错误