タグ付けされた質問 「std」

C ++標準ライブラリとその名前空間。[c ++]と組み合わせて使用​​します。

8
カスタムコンパレータを使用してC ++でpriority_queueを宣言する
コンパレータ関数(ノードクラスの外部)としてpriority_queue of nodesを使用して、を宣言しようとしbool Compare(Node a, Node b)ています。 私が現在持っているものは: priority_queue<Node, vector<Node>, Compare> openSet; どういうわけか、私は得ています Error: "Compare" is not a type name 宣言をに変更する priority_queue <Node, vector<Node>, bool Compare> 私にくれます Error: expected a '>' 私も試しました: priority_queue<Node, vector<Node>, Compare()> openSet; priority_queue<Node, vector<Node>, bool Compare()> openSet; priority_queue<Node, vector<Node>, Compare<Node, Node>> openSet; どうすれば正しく宣言できますpriority_queueか?

2
std :: is_functionはどのように実装されていますか?
次の実装はstd::is_functionどうですか? template<class T> struct is_function : std::integral_constant< bool, !std::is_const<const T>::value && !std::is_reference<T>::value > {}; (CPPリファレンスから) 私には思える、intこの定義の下での関数でしょう。何が欠けていますか?
82 c++  templates  std  sfinae 

2
std :: hashが確定的であることが保証されていないのはなぜですか?
以降、N4140(C ++ 14 Standard)を使用します。 §17.6.3.4ハッシュ要件によると、 返される値k は、プログラム期間中の引数にのみ依存します。 [注:したがってh(k)、の同じ値を持つ 式のすべての評価は、プログラムの特定の実行に対してk同じ結果になります。—エンドノート] および§20.9.12クラステンプレートハッシュは言う ... インスタンス化hash<Key>は: (1.1)—ハッシュ要件を満たす(17.6.3.4)... (1.2)— ... これは、プログラムを再起動した場合value(つまりhash<decltype(value)>(value))のハッシュ値が別の値になる場合があることを意味します。 しかし、なぜ?この制限は、C ++ 11の標準ではなく、C ++ 14、C ++ 17、およびC ++ 20の標準にありました。ユーザー(STL開発者ではない)として、std::hash決定論的である場合は非常に便利です。確定的ハッシュ関数の実装に数学的な困難はありますか?しかし、私たちが日常的に使用しているハッシュ関数(たとえば、非推奨md5sumまたはより安全sha256)はすべて確定的です。効率の問題はありますか?

2
std :: pair内の初期化子リスト
このコード: #include <iostream> #include <string> std::pair<std::initializer_list<std::string>, int> groups{ { "A", "B" }, 0 }; int main() { for (const auto& i : groups.first) { std::cout << i << '\n'; } return 0; } コンパイルしますが、segfaultを返します。どうして? gcc 8.3.0とオンラインコンパイラでテストされています。
26 c++  std  std-pair 

1
std :: swapがClang / Winのvector <bool>要素で機能しないのはなぜですか?
私はこのようなコードを持っています: #include &lt;vector&gt; #include &lt;utility&gt; int main() { std::vector&lt;bool&gt; vb{true, false}; std::swap(vb[0], vb[1]); } vector&lt;bool&gt;脇見の健全性についての議論は、これはうまく機能していました: Mac用のClang Visual Studio for Windows Linux用GCC 次に、WindowsでClangを使用してビルドしようとすると、次のエラー(要約)が表示されました。 error: no matching function for call to 'swap' std::swap(vb[0], vb[1]); ^~~~~~~~~ note: candidate function [with _Ty = std::_Vb_reference&lt;std::_Wrap_alloc&lt;std::allocator&lt;unsigned int&gt; &gt; &gt;, $1 = void] not viable: expects an …

1
コンテナに32を超える要素がある場合にのみ、なぜstd :: sortによってswapが呼び出されるのですか?
こんにちは私は簡単な質問があります: class A { public: A(int); A(const A&amp;); A&amp; operator=(const A&amp;); ~A(); private: int* ptr_; friend bool operator&lt;(const A&amp;, const A&amp;); friend void swap(A&amp;, A&amp;); }; A::A(int x) : ptr_(new int(x)) {} A::A(const A&amp; rhs) : ptr_(rhs.ptr_ ? new int(*rhs.ptr_) : nullptr) {} A&amp; A::operator = (const A &amp; rhs) …
13 c++  std  swap 

1
std :: spanに比較演算子がないのはなぜですか?
/ / プレーン配列などのstd::spanサブ領域への軽量リファレンスとして設計されていませんか?それらとの一貫性を保つために、APIに比較演算子も含めるべきではありませんか?除外の理由は何でしたか?std::vectorstd::array 注:比較演算子で、私はどちらかのフルセットを意味する(&lt;、&lt;=、...)、または宇宙船&lt;=&gt;
10 c++  std  c++20  std-span 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.