听起来你真正想要的是一个std::unordered_map<std::string, std::tuple<std::string, std::string, std::string>>
. 这将使您不必维护std::vector
s 必须是相同长度的不变量。它还将为您提供其他字符串的持续时间查找。例如,
typedef std::tuple<std::string, std::string, std::string> value_type;
std::unordered_map<std::string, value_type> map;
// Populate the map
map["foo"] = std::make_tuple("first", "second", "third");
// ...
std::get<0>(map["foo"]); // Get the first string that "foo" maps to
如果你真的不想改变使用四个std::vector
s 的设计,那么你应该使用std::find
and在第一个std::distance
中找到索引,然后在其他索引上使用该索引:"foo"
std::vector
auto key_it = std::find(std::begin(vec1), std::end(vec1), "foo");
int index = std::distance(std::begin(vec1), key_it);
std::string s2 = vec2[index];
std::string s3 = vec3[index];
std::string s4 = vec4[index];