[英]Cout from a map with std::tuple
我做了一個小的 map,我稱之為BMW
。 它包含鍵Usage
和Diesel
,如下所示。
#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.