Set the DB_RENUMBER flag in the database handle if you want
db_vector<> to work like
std::vector or std::deque. Do not set
DB_RENUMBER if you want db_vector<> to work like
std::list. Note that without DB_RENUMBER set,
db_vector<> can work faster.
For example, to construct a fast std::queue/std::stack object, you only need a
db_vector<> object whose database handle does not have
DB_RENUMBER set. Of course, if the database handle has DB_RENUMBER set, it
still works for this kind of scenario, just not as fast.
db_vector does not check whether DB_RENUMBER is set. If
you do not set it, db_vector<> will not work like
std::vector<>/std::deque<> with regard to operator[], because the
indices are not maintained in that case.
You can find example code showing how to use this feature in the
TestVector::test_queue_stack() method, which is
available in the dbstl test suite.
Just as is the case with std::vector, inserting/deleting in
the middle of a db_vector is slower than doing the same
action at the end of the sequence. This is because the underlying DB_RECNO DB (with
the DB_RENUMBER flag set) is relatively slow when inserting/deleting in the middle
or the head — it has to update the index numbers of all the records following
the one that was inserted/deleted. If you do not need to keep the index ordered on
insert/delete, you can use db_map instead.
db_vector also contains methods inherited from
std::list and std::deque,
including std::list<>'s unique methods
remove(), remove_if(),
unique(), merge(),
sort(), reverse(), and
splice(). These use the identical semantics/behaviors
of the std::list<> methods, although
pushing/deleting at the head is slower than the
std::deque and std::list
equivalent when there are quite a lot of elements in the database.
You can use std::queue,
std::priority_queue and std::stack
container adapters with db_vector; they work with db_vector
even without DB_RENUMBER set.
db_map contains the union of method set from
std::map and hash_map, but there are some
methods that can only be called on containers backed by DB_BTREE or
DB_HASH databases. You can call
db_map<>::is_hash() to figure out the type of the backing
database. If you call unsupported methods then an InvalidFunctionCall exception is thrown.
These are the DB_BTREE specific methods: upper_bound(),
lower_bound(), key_comp(),
and value_comp(). The DB_HASH specific methods are
key_eq(), hash_funct().