QMultiMap Class
template <typename Key, typename T> class QMultiMapQMultiMapクラスは、等価な複数のキーを持つ連想配列を提供するテンプレート・クラスです。詳細...
Header: | #include <QMultiMap> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
- 継承したメンバを含むすべてのメンバの一覧
- 非推奨メンバー
- QMultiMapは暗黙的に共有されるクラスの一部です。
注意:このクラスの関数はすべてリエントラントです。
パブリック型
class | const_iterator |
class | iterator |
class | key_iterator |
ConstIterator | |
Iterator | |
const_key_value_iterator | |
difference_type | |
key_type | |
key_value_iterator | |
mapped_type | |
size_type |
パブリック関数
QMultiMap() | |
(since 6.0) | QMultiMap(QMap<Key, T> &&other) |
(since 6.0) | QMultiMap(const QMap<Key, T> &other) |
QMultiMap(const std::multimap<Key, T> &other) | |
QMultiMap(std::initializer_list<std::pair<Key, T>> list) | |
QMultiMap(std::multimap<Key, T> &&other) | |
QMultiMap(const QMultiMap<Key, T> &other) | |
QMultiMap(QMultiMap<Key, T> &&other) | |
~QMultiMap() | |
(since 6.4) auto | asKeyValueRange() && |
(since 6.4) auto | asKeyValueRange() & |
(since 6.4) auto | asKeyValueRange() const && |
(since 6.4) auto | asKeyValueRange() const & |
QMultiMap<Key, T>::iterator | begin() |
QMultiMap<Key, T>::const_iterator | begin() const |
QMultiMap<Key, T>::const_iterator | cbegin() const |
QMultiMap<Key, T>::const_iterator | cend() const |
void | clear() |
QMultiMap<Key, T>::const_iterator | constBegin() const |
QMultiMap<Key, T>::const_iterator | constEnd() const |
QMultiMap<Key, T>::const_iterator | constFind(const Key &key) const |
QMultiMap<Key, T>::const_iterator | constFind(const Key &key, const T &value) const |
QMultiMap<Key, T>::const_key_value_iterator | constKeyValueBegin() const |
QMultiMap<Key, T>::const_key_value_iterator | constKeyValueEnd() const |
bool | contains(const Key &key) const |
bool | contains(const Key &key, const T &value) const |
QMultiMap<Key, T>::size_type | count(const Key &key) const |
QMultiMap<Key, T>::size_type | count(const Key &key, const T &value) const |
QMultiMap<Key, T>::size_type | count() const |
bool | empty() const |
QMultiMap<Key, T>::iterator | end() |
QMultiMap<Key, T>::const_iterator | end() const |
std::pair<QMultiMap<Key, T>::iterator, QMultiMap<Key, T>::iterator> | equal_range(const Key &key) |
std::pair<QMultiMap<Key, T>::const_iterator, QMultiMap<Key, T>::const_iterator> | equal_range(const Key &key) const |
QMultiMap<Key, T>::iterator | erase(QMultiMap<Key, T>::const_iterator pos) |
(since 6.0) QMultiMap<Key, T>::iterator | erase(QMultiMap<Key, T>::const_iterator first, QMultiMap<Key, T>::const_iterator last) |
QMultiMap<Key, T>::iterator | find(const Key &key) |
QMultiMap<Key, T>::const_iterator | find(const Key &key) const |
QMultiMap<Key, T>::const_iterator | find(const Key &key, const T &value) const |
T & | first() |
const T & | first() const |
const Key & | firstKey() const |
QMultiMap<Key, T>::iterator | insert(const Key &key, const T &value) |
QMultiMap<Key, T>::iterator | insert(QMultiMap<Key, T>::const_iterator pos, const Key &key, const T &value) |
bool | isEmpty() const |
Key | key(const T &value, const Key &defaultKey = Key()) const |
QMultiMap<Key, T>::key_iterator | keyBegin() const |
QMultiMap<Key, T>::key_iterator | keyEnd() const |
QMultiMap<Key, T>::key_value_iterator | keyValueBegin() |
QMultiMap<Key, T>::const_key_value_iterator | keyValueBegin() const |
QMultiMap<Key, T>::key_value_iterator | keyValueEnd() |
QMultiMap<Key, T>::const_key_value_iterator | keyValueEnd() const |
QList<Key> | keys() const |
QList<Key> | keys(const T &value) const |
T & | last() |
const T & | last() const |
const Key & | lastKey() const |
QMultiMap<Key, T>::iterator | lowerBound(const Key &key) |
QMultiMap<Key, T>::const_iterator | lowerBound(const Key &key) const |
QMultiMap<Key, T>::size_type | remove(const Key &key) |
QMultiMap<Key, T>::size_type | remove(const Key &key, const T &value) |
(since 6.1) QMultiMap<Key, T>::size_type | removeIf(Predicate pred) |
QMultiMap<Key, T>::iterator | replace(const Key &key, const T &value) |
QMultiMap<Key, T>::size_type | size() const |
void | swap(QMultiMap<Key, T> &other) |
T | take(const Key &key) |
std::multimap<Key, T> | toStdMultiMap() const & |
QList<Key> | uniqueKeys() const |
QMultiMap<Key, T> & | unite(QMultiMap<Key, T> &&other) |
QMultiMap<Key, T> & | unite(const QMultiMap<Key, T> &other) |
QMultiMap<Key, T>::iterator | upperBound(const Key &key) |
QMultiMap<Key, T>::const_iterator | upperBound(const Key &key) const |
T | value(const Key &key, const T &defaultValue = T()) const |
QList<T> | values() const |
QList<T> | values(const Key &key) const |
QMultiMap<Key, T> & | operator=(QMultiMap<Key, T> &&other) |
QMultiMap<Key, T> & | operator=(const QMultiMap<Key, T> &other) |
非会員
(since 6.1) qsizetype | erase_if(QMultiMap<Key, T> &map, Predicate pred) |
bool | operator!=(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs) |
QMultiMap<Key, T> | operator+(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs) |
QMultiMap<Key, T> | operator+=(QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs) |
QDataStream & | operator<<(QDataStream &out, const QMultiMap<Key, T> &map) |
bool | operator==(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs) |
QDataStream & | operator>>(QDataStream &in, QMultiMap<Key, T> &map) |
詳細説明
QMultiMap<Key, T> は Qt の汎用コンテナクラスの一つです。(キー、値) のペアを格納し、キーによる高速な検索を提供します。
QMultiMap とQMultiHash は非常によく似た機能を提供します。違いは
- QMultiHash はQMultiMapよりも平均的に高速な検索を提供する。(詳細はアルゴリズム複雑度を参照)。
- QMultiHash を反復処理する場合、項目の順序は任意である。QMultiMapでは、項目は常にキーでソートされる。
- QMultiHash のキー・タイプは、 operator==() とグローバルなqHash(Key) 関数を提供しなければならない。QMultiMap のキー・タイプは、総順序を指定する operator<() を提供しなければなりません。Qt 5.8.1以降、ポインタ型をキーとして使用することも安全になりました。
以下は、QString キーとint
値を持つ QMultiMap の例です:
キーと値の)ペアをマルチマップに挿入するには、insert() を使用します:
multimap.insert("a", 1); multimap.insert("b", 3); multimap.insert("c", 7); multimap.insert("c", -5);
これは、以下の 3 つの (key, value) ペアを QMultiMap に挿入します:("a")、("b")、("3")、("c")、("7")、("c")、-5); キーの重複は許されることに注意。
キーの重複が許されることに注意。値を調べるには、find() またはvalue() を使用する:
int num2 = multimap.value("a"); // 1 int num3 = multimap.value("thirteen"); // not found; 0 int num3 = 0; auto it = multimap.constFind("b"); if (it != multimap.cend()) { num3 = it.value(); }
指定したキーを持つ項目がマップにない場合、これらの関数はデフォルトの値を返す。
マップに特定のキーが含まれているかどうかを調べたい場合は、contains() を使用する:
int timeout = 30; if (multimap.contains("TIMEOUT")) timeout = multimap.value("TIMEOUT"); // better: auto it = multimap.find("TIMEOUT"); if (it != multimap.end()) timeout = it.value();
また、value ()のオーバーロードもあり、このオーバーロードでは、指定されたキーを持つ項目がない場合、第2引数をデフォルト値として使用します:
int timeout = multimap.value("TIMEOUT", 30);
QMultiMap に格納されているすべての (key, value) ペアをナビゲートしたい場合は、イテレータを使用できます。QMultiMap には、Java スタイルのイテレータ(QMultiMapIterator とQMutableMultiMapIterator) とSTL スタイルのイテレータ(QMultiMap::const_iterator とQMultiMap::iterator) の両方が用意されています。ここでは、Java スタイルのイテレータを使用して QMultiMap<QString, int> を反復処理する方法を示します:
QMultiMapIterator<QString, int> i(multimap); while (i.hasNext()) { i.next(); cout << qPrintable(i.key()) << ": " << i.value() << endl; }
以下は同じコードだが、今回はSTLスタイルのイテレータを使用している:
for (auto i = multimap.cbegin(), end = multimap.cend(); i != end; ++i) cout << qPrintable(i.key()) << ": " << i.value() << endl;
項目はキーの昇順で走査される。
QMultiMapでは、キーごとに複数の値を指定できます。マップ内に既に存在するキーで insert() を呼び出すと、新しい (key, value) ペアが挿入されます。例えば
multimap.insert("plenty", 100); multimap.insert("plenty", 2000); // multimap.size() == 2
1つのキーに対するすべての値を取得したい場合は、values(const Key &key)を使用できます。これは、QList<T>を返します:
QList<int> values = multimap.values("plenty"); for (auto i : std::as_const(values)) cout << i << endl;
同じキーを共有するアイテムは、最近挿入されたものから最近挿入されなかったものまで利用できる。別の方法としては、find ()を呼び出して、キーを持つ最初のアイテムのSTLスタイルのイテレータを取得し、そこから繰り返し処理を行う:
auto i = multimap.find("plenty"); while (i != map.end() && i.key() == "plenty") { cout << i.value() << endl; ++i; } // better: auto [i, end] = multimap.equal_range("plenty"); while (i != end) { cout << i.value() << endl; ++i; }
キーではなく)マップから値だけを取り出す必要がある場合は、範囲ベースのforを使うこともできる:
マルチマップから項目を削除するには、いくつかの方法がある。ひとつは、remove() を呼び出す方法である。これは、指定されたキーを持つ項目をすべて削除する。もうひとつの方法は、QMutableMultiMapIterator::remove ()を使うことである。さらに、clear() を使用して、マップ全体を消去することもできる。
unite ()、operator+()、 operator+=()を使用して、2つのマルチマップをマージすることができる。例
QMultiMap<QString, int> map1, map2, map3; map1.insert("plenty", 100); map1.insert("plenty", 2000); // map1.size() == 2 map2.insert("plenty", 5000); // map2.size() == 1 map3 = map1 + map2; // map3.size() == 3
QMultiMapのキーと値のデータ型は、代入可能なデータ型でなければなりません。これは、あなたが遭遇する可能性のあるほとんどのデータ型をカバーしていますが、コンパイラは、例えば、値としてQWidget 。代わりに、QWidget *を格納することはできません。さらに、QMultiMapのキー・タイプはoperator<()を提供しなければならない。QMap は、アイテムのソートを維持するためにこれを使用し、x < y
とy < x
のどちらも真でない場合、2つのキーx
とy
は等しいと仮定する。
例
#ifndef EMPLOYEE_H #define EMPLOYEE_H class Employee { public: Employee() {} Employee(const QString &name, QDate dateOfBirth); ... private: QString myName; QDate myDateOfBirth; }; inline bool operator<(const Employee &e1, const Employee &e2) { if (e1.name() != e2.name()) return e1.name() < e2.name(); return e1.dateOfBirth() < e2.dateOfBirth(); } #endif // EMPLOYEE_H
この例では、まず従業員の名前を比較します。もし同じなら、生年月日を比較し、同数を解消する。
QMultiMapIterator 、QMutableMultiMapIterator 、QMultiHashも参照のこと 。
メンバ型ドキュメント
QMultiMap::ConstIterator
QMultiMap::const_iterator の Qt-styleシノニム。
QMultiMap::Iterator
QMultiMap::iterator の Qt 形式のシノニム。
QMultiMap::const_key_value_iterator
QMultiMap::const_key_value_iterator typedef は、QMultiMap に対する STL 形式のイテレータを提供します。
QMultiMap::const_key_value_iterator はQMultiMap::const_iterator と本質的に同じですが, operator*() が値の代わりに key/value ペアを返す点が異なります.
QKeyValueIteratorも参照してください 。
[alias]
QMultiMap::difference_type
ptrdiff_tの型定義です。STLとの互換性のために用意されています。
[alias]
QMultiMap::key_type
Keyの型定義.STL との互換性のために用意されています。
QMultiMap::key_value_iterator
QMultiMap::key_value_iterator typedef は、QMultiMap に対する STL スタイルのイテレータを提供します。
QMultiMap::key_value_iterator はQMultiMap::iterator と本質的に同じですが、 operator*() が値の代わりに key/value ペアを返す点が異なります。
QKeyValueIteratorも参照してください 。
[alias]
QMultiMap::mapped_type
STLとの互換性のために用意されています。
[alias]
QMultiMap::size_type
int の型定義。STL との互換性のために提供される。
メンバ関数ドキュメント
[since 6.4]
auto QMultiMap::asKeyValueRange() &
[since 6.4]
auto QMultiMap::asKeyValueRange() &&
[since 6.4]
auto QMultiMap::asKeyValueRange() const &
[since 6.4]
auto QMultiMap::asKeyValueRange() const &&
このマルチマップをキーと値のペアとして反復処理できる範囲オブジェクトを返します。例えば、この範囲オブジェクトは、構造化バインディング宣言と組み合わせて、範囲ベースのforループで使用することができます:
QMultiMap<QString, int> map; map.insert("January", 1); map.insert("February", 2); // ... map.insert("December", 12); for (auto [key, value] : map.asKeyValueRange()) { cout << qPrintable(key) << ": " << value << endl; --value; // convert to JS month indexing }
このようにして得られるキーと値は、どちらもマルチマップ内のものへの参照であることに注意してください。具体的には、値を変更するとマップ自体が変更されます。
この関数はQt 6.4で導入されました。
QKeyValueIteratorも参照してください 。
QMultiMap::QMultiMap()
空のマルチマップを構築します。
clear()も参照して ください。
[explicit, since 6.0]
QMultiMap::QMultiMap(QMap<Key, T> &&other)
other が共有されている場合、other のコピーとしてマルチマップを構築します。そうでない場合、other から要素を移動してマルチマップを構築します。
この関数は Qt 6.0 で導入されました。
[explicit, since 6.0]
QMultiMap::QMultiMap(const QMap<Key, T> &other)
other のコピーとしてマルチマップを構築します。
この関数は Qt 6.0 で導入されました。
[explicit]
QMultiMap::QMultiMap(const std::multimap<Key, T> &other)
other のコピーを構築します。
toStdMultiMap()も参照してください 。
QMultiMap::QMultiMap(std::initializer_list<std::pair<Key, T>> list)
イニシャライザーリストlist の各要素のコピーでマルチマップを構築します。
[explicit]
QMultiMap::QMultiMap(std::multimap<Key, T> &&other)
other から移動してマルチマップを構築します。
toStdMultiMap() も参照 。
[default]
QMultiMap::QMultiMap(const QMultiMap<Key, T> &other)
other のコピーを構築する。
QMultiMap は暗黙的に共有されるため、この操作は一定時間で行われます。これにより、関数から QMultiMap を返すのが非常に高速になります。共有インスタンスが変更された場合、それはコピーされ(コピーオンライト)、これは線形時間がかかります。
operator=()も参照してください 。
[default]
QMultiMap::QMultiMap(QMultiMap<Key, T> &&other)
Move-QMultiMapインスタンスを構築し、other が指していたのと同じオブジェクトを指すようにします。
[default]
QMultiMap::~QMultiMap()
マルチマップを破棄します。マルチマップ内の値への参照、およびこのマルチマップに対するすべてのイテレータは無効になります。
QMultiMap<Key, T>::iterator QMultiMap::begin()
マルチマップの最初の項目を指すSTLスタイルのイテレータを返します。
constBegin() およびend()も参照してください 。
QMultiMap<Key, T>::const_iterator QMultiMap::begin() const
これはオーバーロードされた関数です。
QMultiMap<Key, T>::const_iterator QMultiMap::cbegin() const
マルチマップの最初の項目を指すSTL 形式のイテレータを返します。
QMultiMap<Key, T>::const_iterator QMultiMap::cend() const
マルチマップの最後の項目の後にある仮想の項目を指す constSTL 形式のイテレータを返します。
void QMultiMap::clear()
マルチマップからすべての項目を削除します。
remove() も参照 。
QMultiMap<Key, T>::const_iterator QMultiMap::constBegin() const
マルチマップの最初の項目を指すSTL 形式のイテレータを返します。
QMultiMap<Key, T>::const_iterator QMultiMap::constEnd() const
マルチマップの最後の項目の後にある仮想の項目を指す constSTL 形式のイテレータを返します。
constBegin() およびend()も参照 。
QMultiMap<Key, T>::const_iterator QMultiMap::constFind(const Key &key) const
マルチマップ内のキーkey を持つ項目を指す const イテレータを返します。
マルチマップにキーkey を持つ項目がない場合、この関数はconstEnd() を返す。
find() および QMultiMap::constFind()も参照してください 。
QMultiMap<Key, T>::const_iterator QMultiMap::constFind(const Key &key, const T &value) const
マップ内のキーkey と値value を持つ項目を指すイテレータを返します。
マップにそのような項目がない場合、この関数はconstEnd() を返します。
QMap::constFind()も参照してください 。
QMultiMap<Key, T>::const_key_value_iterator QMultiMap::constKeyValueBegin() const
マルチマップの最初の項目を指す constSTL 形式のイテレータを返します。
keyValueBegin()も参照 。
QMultiMap<Key, T>::const_key_value_iterator QMultiMap::constKeyValueEnd() const
マルチマップの最後のエントリの後の虚数エントリを指す constSTL 形式のイテレータを返します。
constKeyValueBegin()も参照 。
bool QMultiMap::contains(const Key &key) const
マルチマップにキーkey を持つ項目が含まれている場合はtrue
を返し、そうでない場合はfalse
を返します。
count() も参照 。
bool QMultiMap::contains(const Key &key, const T &value) const
マルチマップにキーがkey で値がvalue の項目が含まれている場合はtrue
を返し、そうでない場合はfalse
を返す。
count() も参照 。
QMultiMap<Key, T>::size_type QMultiMap::count(const Key &key) const
キーkey に関連付けられた項目の数を返します。
contains() およびQMultiMap::count() も参照 。
QMultiMap<Key, T>::size_type QMultiMap::count(const Key &key, const T &value) const
キーkey および値value を持つ項目の数を返します。
contains() およびQMultiMap::count() も参照 。
QMultiMap<Key, T>::size_type QMultiMap::count() const
これはオーバーロードされた関数です。
size() と同じです。
bool QMultiMap::empty() const
この関数は、STL との互換性のために用意されています。この関数はisEmpty() と同等で、マップが空の場合は真を返し、そうでない場合は偽を返します。
QMultiMap<Key, T>::iterator QMultiMap::end()
STL 形式のイテレータを返します。
QMultiMap<Key, T>::const_iterator QMultiMap::end() const
これはオーバーロードされた関数です。
std::pair<QMultiMap<Key, T>::iterator, QMultiMap<Key, T>::iterator> QMultiMap::equal_range(const Key &key)
key の下に格納されている値[first, second)
の範囲を区切るイテレータのペアを返す。
std::pair<QMultiMap<Key, T>::const_iterator, QMultiMap<Key, T>::const_iterator> QMultiMap::equal_range(const Key &key) const
これはオーバーロードされた関数である。
QMultiMap<Key, T>::iterator QMultiMap::erase(QMultiMap<Key, T>::const_iterator pos)
イテレータpos が指す(キー、値)ペアをマルチマップから削除し、マップ内の次の項目へのイテレータを返します。
注意: イテレータpos は有効で、再参照可能でなければなりません。
remove()も参照 。
[since 6.0]
QMultiMap<Key, T>::iterator QMultiMap::erase(QMultiMap<Key, T>::const_iterator first, QMultiMap<Key, T>::const_iterator last)
マルチマップから、イテレータ範囲 [first,last) が指す (key, value) ペアを削除します。最後に削除された要素に続くマルチマップ内の項目へのイテレータを返します。
注意: 範囲[first, last)
は、*this
で有効な範囲でなければなりません。
この関数は Qt 6.0 で導入されました。
remove()も参照してください 。
QMultiMap<Key, T>::iterator QMultiMap::find(const Key &key)
マルチマップ内のキーkey を持つ項目を指すイテレータを返します。
マルチマップにキーkey を持つ項目がない場合、この関数はend() を返します。
マップにキーkey を持つ項目が複数ある場合、この関数は、最近挿入された値を指すイテレータを返します。他の値には、イテレータをインクリメントすることでアクセスできます。たとえば、同じキーを持つすべての項目を反復処理するコードを以下に示します:
auto i = multimap.find("plenty"); while (i != map.end() && i.key() == "plenty") { cout << i.value() << endl; ++i; } // better: auto [i, end] = multimap.equal_range("plenty"); while (i != end) { cout << i.value() << endl; ++i; }
constFind()、value()、values()、lowerBound()、upperBound()も参照の こと。
QMultiMap<Key, T>::const_iterator QMultiMap::find(const Key &key) const
これはオーバーロードされた関数です。
QMultiMap<Key, T>::const_iterator QMultiMap::find(const Key &key, const T &value) const
これはオーバーロードされた関数です。
マップ内の指定されたkey とvalue を持つ項目を指すイテレータを返します。
マップにそのような項目がない場合、この関数はend() を返します。
マップに指定されたkey を持つ複数の項目が含まれる場合、この関数は、最近挿入された値を指す const イテレータを返します。
T &QMultiMap::first()
この関数は、マルチマップ内の最初の値(つまり、最小のキーにマップされた値)への参照を返します。この関数は、マルチマップが空でないことを前提とする。
非共有(またはconstバージョンが呼び出される)の場合、これは定数時間で実行される。
last(),firstKey(),isEmpty()も参照のこと 。
const T &QMultiMap::first() const
これはオーバーロードされた関数である。
const Key &QMultiMap::firstKey() const
マルチマップ内の最小キーへの参照を返す。この関数は、マルチマップが空でないことを前提とする。
この関数は定数時間で実行される。
lastKey()、first()、keyBegin()、isEmpty()も参照 。
QMultiMap<Key, T>::iterator QMultiMap::insert(const Key &key, const T &value)
キーがkey で値がvalue の新しい項目を挿入します。
マップ内に同じキーの項目が既にある場合、この関数は単に新しい項目を作成します。(この動作は、既存の項目の値を上書きするreplace() とは異なります)。
新しい要素を指すイテレータを返します。
replace()も参照 。
QMultiMap<Key, T>::iterator QMultiMap::insert(QMultiMap<Key, T>::const_iterator pos, const Key &key, const T &value)
これはオーバーロードされた関数です。
キーkey と値value を持つ新しい項目を挿入し、どこに挿入するかを示すヒントpos を指定します。
ヒントとしてconstBegin() が使われた場合、key がマルチマップのどのキーよりも小さいことを示し、constEnd() が使われた場合、key がマルチマップのどのキーよりも(厳密には)大きいことを示す。そうでない場合、ヒントは(pos - 1).key() <key <= pos.key()の条件を満たすべきである。ヒントpos が間違っている場合、それは無視され、通常の挿入が行われる。
ヒントが正しく、マルチマップが非共有であれば、挿入は償却された定数時間で実行される。
マップ内に同じキーを持つ項目が既に存在する場合、この関数は単に新しい項目を作成します。
ソートされたデータからマルチマップを作成する場合、constEnd() でソート順に挿入するよりも、constBegin() で最大のキーを最初に挿入する方が高速である。なぜなら、constEnd() - 1(ヒントが有効かどうかをチェックするために必要)は対数時間を必要とするからである。
新しい要素を指すイテレータを返します。
注意:ヒントの取り扱いには注意してください。古い共有インスタンスからイテレータを提供するとクラッシュする可能性があるが、マルチマップとpos マルチマップの両方が静かに破損する危険性もある。
bool QMultiMap::isEmpty() const
マルチマップにアイテムがない場合はtrue
を返し、そうでない場合は false を返します。
size()も参照 。
Key QMultiMap::key(const T &value, const Key &defaultKey = Key()) const
これはオーバーロードされた関数です。
valueマルチマップに値value を持つ項目がない場合はdefaultKey を返します。defaultKey が指定されない場合、この関数はデフォルトで構成されたキーを返します。
QMultiMap の内部データ構造は、値ではなくキーで高速に検索できるように最適化されているため、この関数は遅い(線形時間)場合がある。
QMultiMap<Key, T>::key_iterator QMultiMap::keyBegin() const
マルチマップの最初のキーを指すSTL 形式のイテレータを返します。
QMultiMap<Key, T>::key_iterator QMultiMap::keyEnd() const
マルチマップの最後のキーの後の仮想アイテムを指す constSTL 形式のイテレータを返します。
QMultiMap<Key, T>::key_value_iterator QMultiMap::keyValueBegin()
マルチマップの最初の項目を指すSTL 形式のイテレータを返します。
keyValueEnd()も参照 。
QMultiMap<Key, T>::const_key_value_iterator QMultiMap::keyValueBegin() const
マルチマップの最初のエントリを指すSTL 形式のイテレータを返します。
keyValueEnd()も参照して ください。
QMultiMap<Key, T>::key_value_iterator QMultiMap::keyValueEnd()
マルチマップの最後のエントリの後の虚数エントリを指すSTL 形式のイテレータを返します。
keyValueBegin()も参照 。
QMultiMap<Key, T>::const_key_value_iterator QMultiMap::keyValueEnd() const
マルチマップの最後のエントリの後の虚数エントリを指すSTL 形式のイテレータを返します。
keyValueBegin()も参照 ください。
QList<Key> QMultiMap::keys() const
マルチマップ内のすべてのキーを昇順で含むリストを返します。マルチマップ内で複数回出現するキーは、リスト内でも複数回出現します。
この順序は、values() で使用される順序と同じであることが保証される。
この関数は、線形時間で新しいリストを作成する。keyBegin() からkeyEnd() へと繰り返し実行することで、時間とメモリの浪費を避けることができる。
QList<Key> QMultiMap::keys(const T &value) const
これはオーバーロードされた関数である。
値value に関連付けられたすべてのキーを昇順に含むリストを返します。
QMultiMap の内部データ構造は、値ではなくキーによる高速検索に最適化されているため、この関数は遅い(線形時間)。
T &QMultiMap::last()
マルチマップの最後の値、つまり最大のキーにマップされた値への参照を返す。この関数は、マップが空でないことを前提としている。
非共有(またはconstバージョンが呼ばれた)場合、これは対数時間で実行される。
first(),lastKey(),isEmpty()も参照のこと 。
const T &QMultiMap::last() const
これはオーバーロードされた関数である。
const Key &QMultiMap::lastKey() const
マルチマップ内の最大のキーへの参照を返す。この関数は、マルチマップが空でないことを前提とする。
この関数は対数時間で実行される。
firstKey()、last()、keyEnd()、isEmpty()も参照 。
QMultiMap<Key, T>::iterator QMultiMap::lowerBound(const Key &key)
マップ内のキーkey を持つ最初の項目を指すイテレータを返す。マップにキーkey を持つ項目がない場合、この関数は、より大きなキーを持つ最も近い項目を指すイテレータを返します。
例
QMultiMap<int, QString> multimap; multimap.insert(1, "one"); multimap.insert(5, "five"); multimap.insert(5, "five (2)"); multimap.insert(10, "ten"); multimap.lowerBound(0); // returns iterator to (1, "one") multimap.lowerBound(1); // returns iterator to (1, "one") multimap.lowerBound(2); // returns iterator to (5, "five") multimap.lowerBound(5); // returns iterator to (5, "five") multimap.lowerBound(6); // returns iterator to (10, "ten") multimap.lowerBound(10); // returns iterator to (10, "ten") multimap.lowerBound(999); // returns end()
例: マップにキーkey を持つ複数の項目が含まれる場合、この関数は、最近挿入された値を指すイテレータを返します。他の値には、イテレータをインクリメントすることでアクセスできます。たとえば、同じキーを持つすべての項目を反復処理するコードを以下に示します:
QMap<QString, int> multimap; ... QMap<QString, int>::const_iterator i = multimap.lowerBound("HDR"); QMap<QString, int>::const_iterator upperBound = multimap.upperBound("HDR"); while (i != upperBound) { cout << i.value() << endl; ++i; }
upperBound() およびfind()も参照の こと。
QMultiMap<Key, T>::const_iterator QMultiMap::lowerBound(const Key &key) const
これはオーバーロードされた関数です。
QMultiMap<Key, T>::size_type QMultiMap::remove(const Key &key)
キーkey を持つすべての項目をマルチマップから削除します。削除された項目の数を返します。
QMultiMap<Key, T>::size_type QMultiMap::remove(const Key &key, const T &value)
マルチマップから、キーkey および値value を持つすべての項目を削除します。削除された項目の数を返します。
[since 6.1]
template <typename Predicate> QMultiMap<Key, T>::size_type QMultiMap::removeIf(Predicate pred)
述語pred が真を返す全ての要素をマルチマップから削除します。
この関数は、QMultiMap<Key, T>::iterator
型の引数か、std::pair<const Key &, T &>
型の引数を取る述語をサポートする。
もしあれば、削除された要素の数を返します。
この関数はQt 6.1で導入されました。
QMultiMap<Key, T>::iterator QMultiMap::replace(const Key &key, const T &value)
キーがkey で値がvalue の新しい項目を挿入します。
すでにキーkey を持つ項目がある場合、その項目の値はvalue に置き換えられます。
キーkey を持つ項目が複数ある場合、最も最近挿入された項目の値がvalue に置換されます。
新しい/更新された要素を指すイテレータを返します。
insert()も参照 。
QMultiMap<Key, T>::size_type QMultiMap::size() const
マルチマップ内の (key, value) ペアの数を返します。
[noexcept]
void QMultiMap::swap(QMultiMap<Key, T> &other)
マルチマップother をこのマルチマップと入れ替える。この操作は非常に高速で、失敗することはない。
T QMultiMap::take(const Key &key)
マルチマップからキーkey を持つ項目を削除し、それに関連付けられた値を返します。
その項目がマルチマップに存在しない場合、この関数は単にデフォルトで構成された値を返します。マップ内にkey の項目が複数ある場合は、最近挿入されたものだけが削除されて返されます。
戻り値を使用しない場合は、remove() の方が効率的です。
remove()も参照 。
std::multimap<Key, T> QMultiMap::toStdMultiMap() const &
このQMultiMap と同等の STL マルチマップを返します。
QList<Key> QMultiMap::uniqueKeys() const
マップ内のすべてのキーを昇順に含むリストを返します。マップ内で複数回出現するキーは、返されるリスト内で 1 回だけ出現します。
QMultiMap<Key, T> &QMultiMap::unite(QMultiMap<Key, T> &&other)
other マップからこのマップにすべての項目を移動する。キーが両方のマップに共通する場合、結果のマップにはそのキーが複数回含まれます。
other が共有されている場合は、代わりに項目がコピーされる。
QMultiMap<Key, T> &QMultiMap::unite(const QMultiMap<Key, T> &other)
other マップのすべての項目をこのマップに挿入します。キーが両方のマップに共通の場合、結果のマップにはそのキーが複数回含まれます。
QMultiMap<Key, T>::iterator QMultiMap::upperBound(const Key &key)
マップ内の最後のキーkey を持つアイテムの直後のアイテムを指すイテレータを返します。マップにキーkey を持つ項目がない場合、この関数は、より大きなキーを持つ最も近い項目を指すイテレータを返します。
例
QMultiMap<int, QString> multimap; multimap.insert(1, "one"); multimap.insert(5, "five"); multimap.insert(5, "five (2)"); multimap.insert(10, "ten"); multimap.upperBound(0); // returns iterator to (1, "one") multimap.upperBound(1); // returns iterator to (5, "five") multimap.upperBound(2); // returns iterator to (5, "five") multimap.lowerBound(5); // returns iterator to (5, "five (2)") multimap.lowerBound(6); // returns iterator to (10, "ten") multimap.upperBound(10); // returns end() multimap.upperBound(999); // returns end()
lowerBound() およびfind()も参照 。
QMultiMap<Key, T>::const_iterator QMultiMap::upperBound(const Key &key) const
これはオーバーロードされた関数です。
T QMultiMap::value(const Key &key, const T &defaultValue = T()) const
キーkey に関連付けられた値を返します。
マルチマップにキーkey を持つ項目がない場合、この関数はdefaultValue を返します。defaultValue が指定されていない場合、この関数はデフォルトで構成された値を返します。マルチマップにkey の項目が複数ある場合、最も最近挿入された項目の値が返される。
key()、values()、contains()も参照 。
QList<T> QMultiMap::values() const
マップ内のすべての値をキーの昇順で含むリストを返します。あるキーが複数の値に関連付けられている場合は、最近挿入された値だけでなく、 そのすべての値がリストに含まれます。
QList<T> QMultiMap::values(const Key &key) const
キーkey に関連付けられた、最近挿入されたものから最近挿入されなかったものまでの すべての値を含むリストを返します。
[default]
QMultiMap<Key, T> &QMultiMap::operator=(QMultiMap<Key, T> &&other)
Move-other をこのQMultiMap インスタンスに割り当てます。
[default]
QMultiMap<Key, T> &QMultiMap::operator=(const QMultiMap<Key, T> &other)
other をこのマルチマップに割り当て、このマルチマップへの参照を返します。
関連する非メンバー
[since 6.1]
template <typename Key, typename T, typename Predicate> qsizetype erase_if(QMultiMap<Key, T> &map, Predicate pred)
マルチマップmap から、述語pred が真を返すすべての要素を削除する。
この関数は、QMultiMap<Key, T>::iterator
型の引数か、std::pair<const Key &, T &>
型の引数を取る述語をサポートする。
もしあれば、削除された要素の数を返します。
この関数はQt 6.1で導入されました。
bool operator!=(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
lhs がrhs と等しくなければtrue
を返し、そうでなければfalse
を返します。
2つのマルチマップは、同じ(キー、値)ペアを同じ順序で含んでいる場合、等しいとみなされます(これはキーの重複に関係します)。
この関数は、operator==()
を実装するためのキーと値の型を必要とする。
operator==()も参照 。
template <typename Key, typename T> QMultiMap<Key, T> operator+(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
rhs のすべての項目に加え、lhs のすべての項目を含むマップを返します。 キーが両方のマップに共通する場合、結果のマップにはそのキーが複数回含まれます。
operator+=()も参照 。
template <typename Key, typename T> QMultiMap<Key, T> operator+=(QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
rhs マップのすべての項目をlhs マップに挿入し、結果のマップを返します。
template <typename Key, typename T> QDataStream &operator<<(QDataStream &out, const QMultiMap<Key, T> &map)
マルチマップmap をストリームout に書き込みます。
この関数は、operator<<()
を実装するためのキー型と値型を必要とします。
QDataStream 演算子の形式も参照して ください。
bool operator==(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
lhs がrhs と等しい場合はtrue
を返し、そうでない場合は false を返します。
2つのマルチマップは、同じ(キー、値)ペアを同じ順序で含んでいる場合、等しいとみなされます(これは、キーの重複に関係します)。
この関数は、operator==()
を実装するためのキーと値の型を必要とする。
operator!=()も参照 。
template <typename Key, typename T> QDataStream &operator>>(QDataStream &in, QMultiMap<Key, T> &map)
ストリームin からマップをmap に読み込みます。
この関数には、operator>>()
を実装するためのキー型と値型が必要です。
QDataStream 演算子のフォーマットも参照して ください。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。