多个向量的字符串操作

string manipulation of multiple vectors

本文关键字:字符串 操作 向量      更新时间:2023-10-16

我有三个向量

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;
}