我目前正在使用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())
);
答案 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);