Fixed map iterator

This commit is contained in:
Isuru Samarathunga
2025-07-19 12:10:06 +05:30
parent 83bb826f24
commit ed70c2b310
5 changed files with 21 additions and 8 deletions

View File

@ -20,7 +20,7 @@
namespace ia namespace ia
{ {
// [IATODO: IMPL] (Allocator must be fore _value_type, not ListEntry<_value_type>) // [IATODO: IMPL] (Allocator must be for _value_type, not ListEntry<_value_type>)
template<typename _value_type> template<typename _value_type>
class ListEntry; class ListEntry;

View File

@ -36,10 +36,10 @@ namespace ia
using key_type = _key_type; using key_type = _key_type;
using value_type = _value_type; using value_type = _value_type;
using allocator_type = _allocator_type; using allocator_type = _allocator_type;
using iterator = Vector<ListEntry<KeyValuePair>*>::iterator; using iterator = Vector<KeyValuePair*>::iterator;
using const_iterator = Vector<ListEntry<KeyValuePair>*>::const_iterator; using const_iterator = Vector<KeyValuePair*>::const_iterator;
using reverse_iterator = Vector<ListEntry<KeyValuePair>*>::reverse_iterator; using reverse_iterator = Vector<KeyValuePair*>::reverse_iterator;
using reverse_const_iterator = Vector<ListEntry<KeyValuePair>*>::reverse_const_iterator; using reverse_const_iterator = Vector<KeyValuePair*>::reverse_const_iterator;
STATIC CONSTEXPR size_type alignment = _alignment; STATIC CONSTEXPR size_type alignment = _alignment;
@ -57,7 +57,7 @@ namespace ia
BOOL contains(IN CONST key_type& key) CONST; BOOL contains(IN CONST key_type& key) CONST;
public: public:
_value_type& operator[](IN CONST _key_type& key) { const auto t = get(key); if(t) return *t; set(key, value_type()); return (*m_insertedOrder.back())->Value; } _value_type& operator[](IN CONST _key_type& key) { const auto t = get(key); if(t) return *t; set(key, value_type()); return m_insertedOrder.back()->Value; }
CONST _value_type& operator[](IN CONST _key_type& key) CONST { const auto t = get(key); if(!t) throw "no such key"; return *t; } CONST _value_type& operator[](IN CONST _key_type& key) CONST { const auto t = get(key); if(!t) throw "no such key"; return *t; }
public: public:
@ -81,6 +81,6 @@ namespace ia
private: private:
Vector<List<KeyValuePair>> m_buckets; Vector<List<KeyValuePair>> m_buckets;
Vector<ListEntry<KeyValuePair>*> m_insertedOrder; Vector<KeyValuePair*> m_insertedOrder;
}; };
} }

View File

@ -39,7 +39,8 @@ namespace ia
{ {
define_member_function(VOID, set, IN CONST key_type& key, IN value_type&& value) define_member_function(VOID, set, IN CONST key_type& key, IN value_type&& value)
{ {
m_insertedOrder.pushBack(getBucket(key).append({ key, IA_MOVE(value) })); const auto listEntry = getBucket(key).append({ key, IA_MOVE(value) });
m_insertedOrder.pushBack(*listEntry);
} }
define_const_member_function(CONST _value_type*, get, IN CONST key_type& key) define_const_member_function(CONST _value_type*, get, IN CONST key_type& key)

View File

@ -2,6 +2,7 @@
#include <iacore/file.hpp> #include <iacore/file.hpp>
#include <iacore/vector.hpp> #include <iacore/vector.hpp>
#include <iacore/map.hpp>
using namespace ia; using namespace ia;
@ -18,5 +19,16 @@ int main(int argc, char* argv[])
print(v1); print(v1);
List<int> l1;
Map<String, int> m1;
m1["sdd"] = 2;
m1["bx"] = 5;
for(const auto& v: m1)
{
printf("%s, %i\n", v->Key.c_str(), v->Value);
}
return 0; return 0;
} }