In article <0h4Cj.11565$wM2.6305@[EMAIL PROTECTED]
>, hal@[EMAIL PROTECTED]
says...
> I need to store 2 - 4 values that I have in hex in a map. I've tried
> storing an int[] in a map and can't make it work. As of now, the only
way
> I can think of is to store it as a string, like "0x01 0xDF". But then
when
> I get it out of the map, I don't see how to convert it to one int for
each
> specified hex number.
>
> If I could either store an array of 2-4 integers in a map or convert the
hex
> strings to integers, it would work. I've also experimented, on the
output
> end, with sscanf and sprintf, but I don't seem to have them working
right.
> (Plus I have to convert the string to a char[].)
You can't store an array in a container because anything you store in a
container has to be copyable and assignable, but an array is neither. An
obvious alternative is to create a class of your own that does sup****t
those, something like this:
class small_array {
int data[4];
unsigned char max:2;
public:
int &operator[](size_t index) {
assert(index<4);
return data[index&0x3];
}
small_array &operator=(small_array const &other) {
max = other.max;
std::copy(other.data, other.data+other.max+1, data);
return *this;
}
small_array(small_array const &other) : max(other.max) {
std::copy(other.data, other.data+other.max+1, data);
}
small_array(int *values, size_t num_values = 0)
: max(num_values-1)
{
assert(num_values <= 4);
std::copy(values, values+num_values, data);
}
bool push_back(int const &value) {
if (max>=3)
return false;
data[++max] = value;
}
};
Though this doesn't sup****t the full interface for std::vector, it
sounds like it's probably close enough for your purposes -- and if not,
you have the full source code to work with in adding things like
pop_back, begin(), end(), etc.
--
Later,
Jerry.
The universe is a figment of its own imagination.


|