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

时间:2018-04-25 14:32:56

标签: c++ vector

我目前正在使用C ++中的字符串向量向量。我有一组当前矢量矢量和矢量用户输入矢量。我想删除与向量的用户输入向量不匹配的向量的当前向量。截至目前我正在使用set_difference函数模板,虽然我希望在比较中忽略向量向量中的最后一个字符串(因为它们是必需的标识符,并且将始终是唯一的)。有什么建议或例子吗?

以下是一些代码:

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

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

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())
              );

1 个答案:

答案 0 :(得分:0)

假设:

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