如果您不关心原始数组中元素的顺序,最好切换到std::map
orstd::unordered_map
并使用元素作为键,元素计为 vals:{2 => 1, 5 => 1, 76 => 2}
在 Perl 语法中。或者,定义您自己的 Iterator 类:
template<typename T> struct DoubleArrayIterator {
DoubleArrayIterator(T *jimmy, T *billy): jimmy(jimmy), billy(billy) {}
DoubleArrayIterator &operator++() { ++jimmy, ++billy; return *this; }
std::pair<T, T> operator*() const { return std::make_pair(*jimmy, *billy); }
static DoubleArrayIterator begin(T *jimmy, T *billy) { return DoubleArrayIterator(jimmy, billy); }
template<size_t N> static DoubleArrayIterator end(T (&jimmy)[N], T(&billy)[N]) { return DoubleArrayIterator(jimmy + N, billy + N); }
bool operator==(DoubleArrayIterator const &that) { return jimmy == that.jimmy && billy == that.billy; }
private:
T *jimmy, *billy;
};
或者简单地使用索引而不是迭代器。