簡體   English   中英

從帶有 std::tuple 的 map 中輸出

[英]Cout from a map with std::tuple

我做了一個小的 map,我稱之為BMW 它包含鍵UsageDiesel ,如下所示。

#include <iostream>
#include <bits/stdc++.h>
#include <map>
#include <vector>
using namespace std;

int main()
{

    // initialize container
    std::map<string, std::tuple<string, string>> BMW;

    // insert elements
    BMW.insert({"Usage", {"1", "2"}});
    BMW.insert({"Disel", {"2", "3"}});

    std::cout << "Usage => " << BMW.find('Usage')->second << '\n';

    return 0;
}

我要做的是在 map 中找到關鍵的Usage ,然后打印出包含Usage (1, 2) 值的字符串。 我嘗試使用的代碼不起作用,我無法在 Stackoverflow 上找到一個好的答案。 這是我得到的錯誤:

error: no matching function for call to 'std::map<std::__cxx11::basic_string<char>, std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::find(int)'|

如果我想這樣做的話,如果我只能得到一個字符串,就像第一個字符串一樣,那就太好了。

(字符串稍后將在適當的時候轉換為 int,但由於技術原因,我現在想將它們作為字符串讀取)

BMW.find('Usage')->second
//       ^     ^

這些是單引號

單引號分隔char文字。

你想要雙引號

那是因為雙引號分隔字符串文字。


錯誤消息說您正在嘗試使用不存在的find(int)重載的原因是,實際上包含多個字符的char文字是一種特殊的東西,稱為“多字符文字”, int類型和實現定義的值。 您通常不打算使用這些。


接下來,您將遇到元組沒有內置cout格式的問題。 您將不得不接受BMW.find("Usage")->second並將其提供給 function 以您想要的任何方式打印內容。

對於初學者,如果您使用成員 function find ,那么您應該檢查是否確實找到了數據。

在這個表達式中

BMW.find('Usage')

您正在使用多字節字符文字而不是字符串文字。 表達式必須寫成

BMW.find( "Usage" )

對於std::tuple類型的 object 沒有運算符 <<。 您必須 output 元組的單個數據成員。 這是一個演示程序。

#include <iostream>
#include <string>
#include <tuple>
#include <map>
#include <iterator>

int main()
{
    std::map<std::string, std::tuple<std::string, std::string>> BMW;

    // insert elements
    BMW.insert( { "Usage", { "1", "2" } } );
    BMW.insert( { "Disel", { "2", "3" } } );

    auto it = BMW.find( "Usage" );

    if ( it != std::end( BMW ) )
    {
        std::cout << "Usage => ( " << std::get<0>( it->second ) << ", " << std::get<1>( it->second ) << " )\n";
    }        
}

它的 output 是

Usage => ( 1, 2 )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM