Skip to content

Commit 4c74040

Browse files
Add method get_keys from unordered map (#65)
Signed-off-by: Juan López Fernández <juanlopez@eprosima.com>
1 parent fb7d0f4 commit 4c74040

4 files changed

Lines changed: 52 additions & 3 deletions

File tree

cpp_utils/include/cpp_utils/impl/utils.ipp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,5 +177,17 @@ std::set<Key> get_keys(
177177
return ret;
178178
}
179179

180+
template <typename Key, typename Value>
181+
std::set<Key> get_keys(
182+
const std::unordered_map<Key, Value>& map)
183+
{
184+
std::set<Key> ret;
185+
for (const auto& elem : map)
186+
{
187+
ret.insert(elem.first);
188+
}
189+
return ret;
190+
}
191+
180192
} /* namespace utils */
181193
} /* namespace eprosima */

cpp_utils/include/cpp_utils/utils.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include <set>
2626
#include <sstream>
2727
#include <string>
28+
#include <unordered_map>
2829
#include <vector>
2930

3031
#include <cpp_utils/macros/macros.hpp>
@@ -288,6 +289,11 @@ CPP_UTILS_DllAPI
288289
std::set<Key> get_keys(
289290
const std::map<Key, Value>& map);
290291

292+
template <typename Key, typename Value>
293+
CPP_UTILS_DllAPI
294+
std::set<Key> get_keys(
295+
const std::unordered_map<Key, Value>& map);
296+
291297
} /* namespace utils */
292298
} /* namespace eprosima */
293299

cpp_utils/test/unittest/utils/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ set(TEST_LIST
3535
split_string_one_delimiter
3636
split_strings_one_delimiter
3737
split_string_delimiters
38-
get_keys
38+
get_map_keys
39+
get_unordered_map_keys
3940
)
4041

4142
set(TEST_EXTRA_LIBRARIES

cpp_utils/test/unittest/utils/utilsTest.cpp

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -580,9 +580,9 @@ TEST(utilsTest, split_string_delimiters)
580580
}
581581

582582
/**
583-
* Test method get_keys
583+
* Test method get_keys from std::map
584584
*/
585-
TEST(utilsTest, get_keys)
585+
TEST(utilsTest, get_map_keys)
586586
{
587587
// std::string keys
588588
{
@@ -609,6 +609,36 @@ TEST(utilsTest, get_keys)
609609
}
610610
}
611611

612+
/**
613+
* Test method get_keys from std::unordered_map
614+
*/
615+
TEST(utilsTest, get_unordered_map_keys)
616+
{
617+
// std::string keys
618+
{
619+
std::set<std::string> keys = {"a", "b", "c", "d"};
620+
std::unordered_map<std::string, std::string> map;
621+
for (auto key: keys)
622+
{
623+
map.emplace(key, "value");
624+
}
625+
626+
ASSERT_EQ(keys, get_keys(map));
627+
}
628+
629+
// int keys
630+
{
631+
std::set<int> keys = {1, 2, 3, 4};
632+
std::unordered_map<int, std::string> map;
633+
for (auto key: keys)
634+
{
635+
map.emplace(key, "value");
636+
}
637+
638+
ASSERT_EQ(keys, get_keys(map));
639+
}
640+
}
641+
612642
int main(
613643
int argc,
614644
char** argv)

0 commit comments

Comments
 (0)