Dbstl container specific notes
Associative container specific notes
db_vector specific notes
Set the DB_RENUMBER flag in the database handle if you want
db_vector<>to work likestd::vectororstd::deque. Do not set DB_RENUMBER if you wantdb_vector<>to work likestd::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_vectordoes 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
StlAdvancedFeaturesExample::queue_stack()method.Just as is the case with
std::vector, inserting/deleting in the middle of adb_vectoris 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 usedb_mapinstead.db_vectoralso contains methods inherited fromstd::listandstd::deque, includingstd::list<>'sunique methodsremove(),remove_if(),unique(),merge(),sort(),reverse(), andsplice(). These use the identical semantics/behaviors of thestd::list<>methods, although pushing/deleting at the head is slower than thestd::dequeandstd::listequivalent when there are quite a lot of elements in the database.You can use
std::queue,std::priority_queueandstd::stackcontainer adapters withdb_vector; they work with db_vector even without DB_RENUMBER set.
Associative container specific notes
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().