【发布时间】:2009-10-11 14:41:07
【问题描述】:
如何在 c++ 数组中使用字符串索引(如在 php 中)?
【问题讨论】:
如何在 c++ 数组中使用字符串索引(如在 php 中)?
【问题讨论】:
您可以使用std::map 获取关联容器,您可以在其中通过字符串索引查找值。像 std::map<std::string, int> 这样的映射会将整数值与 std::string 查找键相关联。
【讨论】:
它们被称为关联数组(或字典),允许您使用任何您想要的类型作为键,而不仅仅是整数。它们在 PHP 中原生支持,在 C++ 中你应该使用 std::map 除非你在 .net 中, which has its own dictionary class
【讨论】:
最接近的可能是 std::map。
查看wikipedia page了解详情。
【讨论】:
很多人说std::map 是一个选择。要像使用数组索引一样有效,我认为std::unordered_map 可能会更好。
因为std::map 和key_type 的性能可能很差。因为在最坏的情况下比较两个字符串将花费O(string::size()) 时间。所以如果索引字符串很长很相似,而且数量太多,我会说使用std::map是不现实的。
而且我有一些更好的方法来实现它,但我不确定它们是否可行(尤其是第二种)。
string_view 代替字符串。【讨论】:
您需要使用 std::map 之类的东西来拥有一个行为类似于关联数组的对象。
【讨论】:
有一个名为Matrix library 的数据结构。该库支持您正在寻找的二维数组和关联数组。
Matrix<string> arr(3, 2);
// setting keys
arr[0][0] = "name";
arr[0][1] = "lastname";
// using array
arr[1]["name"] = "John";
arr[1]["lastname"] = "Parkers";
arr[2]["name"] = "Sam";
arr[2]["lastname"] = "Bendrou";
在这里你可以找到矩阵库的documentation。
【讨论】:
这个功能通常称为地图。 如果您已经使用 Boost,则可以使用他们的地图,如果没有,您必须三思而后行 :) 好吧,如果不是 Dimtry 正确 - std::map 就是您所需要的。
【讨论】: