忽略set_difference向量向量中的最后一个字符串

Ignoring the Last String in Vectors of Vectors for set_difference

本文关键字:向量 最后一个 字符串 忽略 difference set      更新时间:2023-10-16

我当前正在使用C 中字符串向量的向量。我有一个当前的向量向量和一个向量的用户输入向量。我想删除不匹配向量的用户输入向量的向量的当前向量。截至目前,我正在使用set_difference函数模板,尽管我希望在比较中忽略向量向量中的最后一个字符串(因为它们是必要标识符,并且始终是唯一的(。有任何建议或示例吗?

以下是代码:

vector<vector<string> > curTable;
vector<vector<string> > inTable;
vector<vector<string> > difTable;

标识符(fulLeleventString(是发送到硬件的二进制字符串,这是向量向量中的示例向量:

connection = {sramChipID, sramCoreID, sramNeuronID, sramID,
              camChipID, camCoreID, camNeuronID, synType, camID,
              fullEventString
              };

...

set_difference(curTable.begin(), curTable.end(),
               inTable.begin(), inTable.end(),
               inserter(difTable, difTable.begin())
              );

假设:

using Lines = std::vector<std::vector<std::string>>;
Lines current = { ... }; // sorted on std::less<std::vector<std::string>>
Lines input = { ... }; // also sorted on std::less<std::vector<std::string>>
Lines difference;

而不是做

std::set_difference(current.begin(), current.end(), input.begin(), input.end(), std::back_inserter(difference));

你应该做

auto compare = [](Lines::const_reference lhs, Lines::const_reference rhs)
{
    assert(lhs.size() && rhs.size())
    // same as default comparison, except skiping the last element
    return std::lexicographical_compare(lhs.begin(), std::prev(lhs.end()), rhs.begin(), std::prev(rhs.end()));
};
std::set_difference(current.begin(), current.end(), input.begin(), input.end(), std::back_inserter(difference), compare);