首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从std::variant<std::string获取substr,std::vector<std::string>>> in C++

从std::variant<std::string获取substr,std::vector<std::string>>> in C++
EN

Stack Overflow用户
提问于 2022-08-02 05:06:56
回答 1查看 36关注 0票数 0

所以我得到了一个带有字符串键和字符串或向量值的映射。我希望循环遍历映射中的所有字符串值(无论它们是在向量中找到的还是可以直接检查的),并检查它们是否与给定的字符串匹配(与字符串的内容无关)。如果该字符串完全或部分匹配,我将在向量中放置字符串所在的映射。

我遇到的问题是,尽管我使用一个if条件将字符串从向量中分离出来,但substr函数认为我正在处理一个std::variant<std::string, std::vector<std::string>>>,因此给了我一个错误。

否则函数中的begin函数也告诉我,由于这个原因,变体没有一个名为"begin“的成员。我完全迷路了,任何帮助都会很好。

代码语言:javascript
运行
复制
for (std::unordered_map<std::string,
                        std::variant<std::string,
                        std::vector<std::string>>>::iterator h = MyMap.begin();
    h != MyMap.end();
    h++) {
    if (typeid(h->second) == typeid(std::string)) {
        std::string MapValueString = h->second.substr(0, TextCtrlValue.length());
        if (MapValueString == TextCtrlValue) {
            RightSearchResultsVector.insert(RightSearchResultsVector.end(), Maps.begin(), Maps.end());
        }
    }
    else {
        for (std::vector<std::string>::iterator f = h->second.begin(); f != h->second.end(); f++) {
            // Go through vector and find matching/semi matching strings
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-02 05:21:04

下面是如何判断一个变体的类型

代码语言:javascript
运行
复制
std::string* pstr = std::get_if<std::string>(&h->second);
if (pstr != nullptr)
{
    // do stuff with string
}
else
{
    std::vector<std::string>& vec = std::get<std::vector<std::string>>(h->second);
    // do stuff with vector
}

顺便说一句,你可以简化这个怪物

代码语言:javascript
运行
复制
for (std::unordered_map<std::string,
                    std::variant<std::string,
                    std::vector<std::string>>>::iterator h = MyMap.begin();

通过写作

代码语言:javascript
运行
复制
for (auto h = MyMap.begin();

明智地使用auto可以极大地提高代码的可读性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73202227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档