Re: Search only one column of a multi-dimensional array
On 3/7/2011 1:16 PM, Angus wrote:
On Mar 7, 6:05 pm, Victor Bazarov<v.baza...@comcast.invalid> wrote:
On 3/7/2011 12:17 PM, Angus wrote:
using lower_bound I want to pass a 2-dimensional array eg like this:
static const int tbl[5][3] = {
1000, 800, 801,
1001, 802, 803,
1002, 804, 805,
1003, 806, 807,
1004, 808, 809
};
I want to search in only the first column - eg the numbers 1000-1004.
I am trying to find the position in this 2-dimensional array, and then
once located I can access elements[position][1] and elements[position]
[2].
I tried this:
int arrsize = sizeof(tbl)/sizeof(tbl[0]);
low=lower_bound(tbl[0], tbl[0]+arrsize, 7);
But get compile error C2440 cannot convert from 'const int *' to 'int
*'
How can I do this?
You should probably provide your own iterator, which when incremented
will skip the rest of the "row".
V
--
I do not respond to top-posted replies, please don't ask
Are you suggesting it 'jump' over the other items in row. Eg if there
were five columns of ints it would jump 5 int's worth on each
iteration?
Yes, that's exactly what I'm suggesting.
Can you provide an outline example? Or place to find something like
this?
Something like this:
template<class T, size_type N, size_type M>
class arr_col_iter_t
{
T (&arr)[N][M];
size_type col;
size_type ind;
public:
arr_col_iter_t(T (&a)[N][M], size_type c, size_type ind0)
: arr(a), col(c), ind(ind0) {}
T& operator *() { return arr[ind][col]; }
arr_col_iter_t& operator++() { ++ind; return *this; }
arr_col_iter_t operator++(int) {
arr_col_iter_t temp(*this);
++ind; return temp;
}
bool operator!=(arr_col_iter_t const& other) const
{
assert(&arr == &other.arr
&& col == other.col); // same array, same col
return ind != other.ind;
}
};
template<class T, size_type N, size_type M>
arr_col_iter_t<T,N,M> arr_iter(T (&arr)[N][M], size_type c,
size_type ind0 = 0)
{
return arr_col_iter_t<T,N,M>(arr, c, ind0);
}
...
// to iterate over "column 0" from 0 to arrsize-1:
lower_boundary(arr_iter(tbl, 0), arr_iter(tb, 0, arrsize), 7);
There are undoubtedly holes in that (not to mention that it's not a
fully fledged iterator according to Standard's requirements - no tag, no
value_type, etc.)
V
--
I do not respond to top-posted replies, please don't ask