我需要将单个字符串映射到多个字符串,为此我想到了两个不同的解决方案:
第一个是将每个字符串映射到一个向量,这样当我看到键时,我得到了向量。 std::unordered_map<std::string, std::vector<std::string>>
使用此解决方案意味着我只需要查找一次键,但我必须迭代数组才能找到所需的正确字符串。
我认为第二个解决方案是使用向量中包含的每个字符串(我知道它们是唯一的)作为键,并将它们映射到解决方案1中的关键字。std::unordered_map<std::string, std::string>
<登记/>
使用这个解决方案意味着我需要寻找一个键n次(其中n是解决方案1中数组的长度),而在我的地图中,我有许多键的相同值(我不知道是否重要在最后)但我会直接拥有我需要的字符串。
示例1:
std::unordered_map<std::string, std::vector<std::string>> map;
std::vector<std::string> arr = {"hello", "world"};
map["greetings"] = array;
示例2:
std::unordered_map<std::string, std::string> map;
map["hello"] = "greetings";
map["world"] = "greetings";
出于我的程序的目的,我最终得到的是什么字符串(解决方案1的数组中的值或解决方案2中的值)并不重要,只要我有办法将它们映射到彼此,所以两种解决方案都是可行的 我没有办法提前知道解决方案1中阵列的长度。
这两种解决方案有什么重大差异吗?哪一个更快/在纸上使用更少的内存?
答案 0 :(得分:2)
您有一个字符串和一系列字符串之间的映射(如果插入顺序不重要,则可能是一组字符串)。尽管你的第二个例子以相反的方式使用它们,让我们调用前面的键和后面的值。
示例一允许您有效地查找与特定键关联的所有值。因此,方法1更快,方法2更慢。
示例2允许您有效地查找特定值映射到的键。因此,方法2更快,方法1更慢。
正如您所看到的,两个示例都比另一个更快。
答案 1 :(得分:0)
你的两个选择做不同的事情。
示例1:
imageview = (ImageView) findViewById(R.id.imview_camera_setter);
framelayout = (FrameLayout) findViewById(R.id.frame_layout_viewer);
try {
File f=new File(internalpath, "profile.jpg");
Bitmap b = BitmapFactory.decodeStream(new FileInputStream(f));
imageview.setImageBitmap(Bitmap.createScaledBitmap(b, 300, 300, false));
} catch (FileNotFoundException ex) {
ex.printStackTrace();
}
示例2:
std::unordered_map<std::string, std::vector<std::string>> map;
map["greetings"] = {"hello", "world"};
map["farewells"] = {"goodbye", "cruel", "world"};
for(auto && pair : map) {
for(auto && value : pair.second) {
std::cout << pair.first << value;
}
}
// greetings hello
// greetings world
// farewells goodbye
// farewells cruel
// farewells world