c++ 如何在抛出runTime错误后打印std::map

wz3gfoph  于 2022-12-05  发布在  其他
关注(0)|答案(1)|浏览(138)

我想在函数中抛出一个runTime错误,然后打印一个Map。
下面的代码:

#include <iostream>
#include <string>
#include <map>

class myClass
{
    public:

        static bool storeInMap(const std::string& name, int value)
        {
            if(myMap.find(name) == myMap.end())
            { 
                myMap[name] = value;
                return true;
            }
            return false;
        }

        static void lookup(const std::string& name)
        {
            auto it = myMap.find(name);
            if (it != myMap.end())
            {
                std::cout << "Found " << std::endl;
            }
            else
            {
                std::cout << "Not found. \n \
                             Available are: \n " << std::endl;
            }
        }

    private:
        static std::map<std::string, int> myMap;
};

std::map<std::string, int> myClass::myMap;

int main()
{
    myClass::storeInMap("one", 1);
    myClass::storeInMap("two", 2);
    myClass::lookup("one");
    myClass::lookup("three");

    return 0;
}

main中的前两行将存储"one""two"的条目。第三行将在map中查找条目"one"并打印"Found"。第四行将引发runTime error并打印myMap中的所有条目。在以下情况中:

Not found 
Available are:
"one"
"two"

不过,我不知道如何把Map在一个runTime error,并将感谢帮助!
顺祝商祺

unhi4e5o

unhi4e5o1#

我想这就是你想要的

else
{
    std::string error_msg = "\n\nNot found!\nAvailable are:\n";
    for(auto& n : myMap)
    {
        error_msg += n.first + "\n";
    }
    throw std::runtime_error(error_msg.c_str());
}

相关问题