我有一个相当简单/明显的迭代器解决方案,但是我想点击这个以确定是否有人想出了一个偶尔出现在这里的答案中的惊人食谱:)
情况如下:
vector<vector<int>>
中的已知和可用大小的int的多个向量无法解决此问题,原因是API请求的混合和仅在运行时知道的vect数由于我目前绑定了两个具有严格二进制要求的API,因此这是GCC 4.1.x限制,因此绝对且令人抓狂的缺少任何C ++ 0x,但是可以使用Boost 1.44。
目前这些vect都包含唯一的索引,但是在将来生成一个删除了重复项的过滤数组(未来的使用可能涉及具有重叠索引的Feed)也可能成为一个要求,所以如果处理了这个奖励积分。
C ++ 11解决方案或任何相关的东西仍然受欢迎。我不是在找人做我的作业,无论如何我都有一个笨重而又有效的作品,我更多的是在启蒙和菜谱灵感之后,而不是任何东西。
提前致谢
答案 0 :(得分:1)
这不是100%清楚你想要什么,但充分利用你所说的,我会做这样的事情:
std::vector<std::vector<int>> v; // input, assume it's already filled
std::size_t size = 0;
for (std::vector<std::vector<int>>::const_iterator i = v.begin(); i != v.end(); ++i)
{
size += i->size();
}
boost::scoped_array<int> array;
if (size != 0)
{
array.reset(new int[size]);
std::size_t offset = 0;
for (std::vector<std::vector<int>>::const_iterator i = v.begin(); i != v.end(); ++i)
{
std::copy_n(&(*i)[0], i->size(), array + offset);
offset += i->size();
}
}
// ...use array...
如果你想让array
与众不同,你可以这样做:
std::sort(array.get(), array.get() + size);
std::size_t newSize = std::unique(array.get(), array.get() + size) - array.get();
// Now array is unique, assuming you only use elements [0, newSize)
可能有更有效的方法来排序和制作唯一的(可能对每个子向量进行排序,然后在将它们复制到新数组时执行合并排序样式操作(并且根本不复制现有项)),但是我在我的回答中,我的目标是简单+正确。一旦你有一个已知正确的解决方案,优化就可以在以后进行。