ΠΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΈ ΡΠ°Π²Π΅Π½ΡΡΠ²Π° ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΉ Π²Π΅Π΄ΡΡ ΡΠ΅Π±Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 9.2.7). ΠΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄Π»Ρ ΡΠ»Π΅Π½ΠΎΠ² Π΄Π²ΡΡ ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΉ, ΡΠ»Π΅Π²Π° ΠΈ ΡΠΏΡΠ°Π²Π°. Π‘ΡΠ°Π²Π½ΠΈΡΡ Π΄Π²Π° ΠΊΠΎΡΡΠ΅ΠΆΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΈΡ ΡΠ»Π΅Π½ΠΎΠ². ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΡΠ°Π²Π΅Π½ΡΡΠ²Π° ΠΈΠ»ΠΈ Π½Π΅ΡΠ°Π²Π΅Π½ΡΡΠ²Π°, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°ΡΡ ΡΠ»Π΅Π½ΠΎΠ² ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ==; Π° Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠΌ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° <. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
tuple<string, string> duo("1", "2");
tuple<size_t, size_t> twoD(1, 2);
bool b = (duo == twoD); // ΠΎΡΠΈΠ±ΠΊΠ°: Π½Π΅Π»ΡΠ·Ρ ΡΡΠ°Π²Π½ΠΈΡΡ size_t ΠΈ string
tuple<size_t, size_t, size_t> threeD(1, 2, 3);
b = (twoD < threeD); // ΠΎΡΠΈΠ±ΠΊΠ°: ΡΠ°Π·Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ»Π΅Π½ΠΎΠ²
tuple<size_t, size_t> origin(0, 0);
b = (origin < twoD); // ok: b β ΡΡΠΎ true
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊΠΎΡΡΠ΅ΠΆ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ < ΠΈ ==, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°ΠΌ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΡΡΠ΅ΠΆ ΠΊΠ°ΠΊ ΡΠΈΠΏ ΠΊΠ»ΡΡΠ° Π² ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΡ ΡΠ°Π·Π΄Π΅Π»Π° 17.1.1Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 17.1. ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ ΠΊΠΎΡΡΠ΅ΠΆ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΡΡΠΈ ΡΠ»Π΅Π½Π° ΡΠΈΠΏΠ° int, ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠΉΡΠ΅ ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ 10, 20 ΠΈ 30.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 17.2. ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ ΠΊΠΎΡΡΠ΅ΠΆ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΡΡΡΠΎΠΊΡ, Π²Π΅ΠΊΡΠΎΡ ΡΡΡΠΎΠΊΠΈ ΠΈ ΠΏΠ°ΡΡ ΠΈΠ· ΡΡΡΠΎΠΊΠΈ ΠΈ ΡΠ΅Π»ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° (ΡΠΈΠΏΡ string, vector<string> ΠΈ pair<string, int>).
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 17.3. ΠΠ΅ΡΠ΅ΠΏΠΈΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ TextQuery ΠΈΠ· ΡΠ°Π·Π΄Π΅Π»Π° 12.3 ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΡΡΠ΅ΠΆ Π²ΠΌΠ΅ΡΡΠΎ ΠΊΠ»Π°ΡΡΠ° QueryResult. ΠΠ±ΡΡΡΠ½ΠΈΡΠ΅, ΡΡΠΎ Π½Π° Π²Π°Ρ Π²Π·Π³Π»ΡΠ΄ Π»ΡΡΡΠ΅ ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ.
17.1.2. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΉ Π΄Π»Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ
ΠΠ±ΡΡΠ½ΠΎ ΠΊΠΎΡΡΠ΅ΠΆ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π΄Π»Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΡΠΉ ΠΊΠ½ΠΈΠΆΠ½ΡΠΉ ΠΌΠ°Π³Π°Π·ΠΈΠ½ ΠΌΠΎΠ³ Π±Ρ Π±ΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΌΠ°Π³Π°Π·ΠΈΠ½ΠΎΠ² Π² ΡΠ΅ΡΠΈ. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° Π±ΡΠ» Π±Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΎΠ½Π½ΡΠΉ ΡΠ°ΠΉΠ», ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΡΠΎΠ΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π²ΡΠ΅ ΠΏΡΠΎΠ΄Π°ΠΆΠΈ Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π°ΠΌ.
ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΠ°ΠΉΠ» ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΡΡΠΈΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΎΠ½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΠΌΠ°Π³Π°Π·ΠΈΠ½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π²ΡΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³ΡΡΠΏΠΏΡ ΠΊΠ½ΠΈΠ³. ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ ΡΠ°ΠΊΠΆΠ΅, ΡΡΠΎ Π½Π΅ΠΊΠ°Ρ Π΄ΡΡΠ³Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΡΠΈΡΠ°Π΅Ρ ΡΡΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, ΡΠΎΠ·Π΄Π°Π΅Ρ Π²Π΅ΠΊΡΠΎΡ vector<Sales_data> Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ ΡΡΠΈ Π²Π΅ΠΊΡΠΎΡΡ Π² Π²Π΅ΠΊΡΠΎΡ Π²Π΅ΠΊΡΠΎΡΠΎΠ²:
// ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΡΠ°ΠΉΠ»Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ
// Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π°
vector<vector<Sales_data>> files;
ΠΠ°Π²Π°ΠΉΡΠ΅ Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΡΠ°ΠΉΠ»Ρ Π² ΠΏΠΎΠΈΡΠΊΠ°Ρ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π°, ΠΏΡΠΎΠ΄Π°Π²ΡΠ΅Π³ΠΎ Π·Π°Π΄Π°Π½Π½ΡΡ ΠΊΠ½ΠΈΠ³Ρ. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π°, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π΅ΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ°Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠΎΡΡΠ΅ΠΆ Π΄Π»Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΡΡΠΎΠ³ΠΎ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° ΠΈ Π΄Π²ΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ². ΠΠ½Π΄Π΅ΠΊΡ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ·ΠΈΡΠΈΠ΅ΠΉ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° Π² ΡΠ°ΠΉΠ»Π°Ρ , Π° ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ ΠΎΡΠΌΠ΅ΡΡΡ ΠΏΠ΅ΡΠ²ΡΡ ΠΈ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π·Π°ΠΏΠΈΡΠΈ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅ Π² Π²Π΅ΠΊΡΠΎΡΠ΅ vector<Sales_data> ΡΡΠΎΠ³ΠΎ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π°.
Π€ΡΠ½ΠΊΡΠΈΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠ°Ρ ΠΊΠΎΡΡΠ΅ΠΆΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎΠΈΡΠΊΠ° Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ. ΠΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π²Π΅ΠΊΡΠΎΡ Π²Π΅ΠΊΡΠΎΡΠΎΠ² ΠΈ ΡΡΡΠΎΠΊΠ°, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠ°Ρ ISBN ΠΊΠ½ΠΈΠ³ΠΈ. Π€ΡΠ½ΠΊΡΠΈΡ Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π²Π΅ΠΊΡΠΎΡ ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΉ Ρ Π·Π°ΠΏΠΈΡΡΠΌΠΈ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΌΠ°Π³Π°Π·ΠΈΠ½Ρ, Π³Π΄Π΅ Π±ΡΠ»Π° ΠΏΡΠΎΠ΄Π°Π½Π° ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ ΠΎΠ΄Π½Π° Π·Π°Π΄Π°Π½Π½Π°Ρ ΠΊΠ½ΠΈΠ³Π°:
// matches ΠΈΠΌΠ΅Π΅Ρ ΡΡΠΈ ΡΠ»Π΅Π½Π°: ΠΈΠ½Π΄Π΅ΠΊΡ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° ΠΈ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ Π² Π΅Π³ΠΎ Π²Π΅ΠΊΡΠΎΡΠ΅
typedef tuple<vector<Sales_data>::size_type,
vector<Sales_data>::const_iterator,
vector<Sales_data>::const_iterator> matches;
// files Ρ ΡΠ°Π½ΠΈΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΌΠ°Π³Π°Π·ΠΈΠ½Ρ
// findBook() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π²Π΅ΠΊΡΠΎΡ Ρ Π·Π°ΠΏΠΈΡΡΠΌΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π°,
// ΠΏΡΠΎΠ΄Π°Π²ΡΠ΅Π³ΠΎ Π΄Π°Π½Π½ΡΡ ΠΊΠ½ΠΈΠ³Ρ
vector<matches>
findBook(const vector<vector<Sales_data>> &files,
const string &book) {
vector<matches> ret; // ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΏΡΡΡ
// Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° Π½Π°ΠΉΡΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠ½ΠΈΠ³Π΅
// (Π΅ΡΠ»ΠΈ ΠΎΠ½ Π΅ΡΡΡ)
for (auto it = files.cbegin(); it != files.cend(); ++it) {
// Π½Π°ΠΉΡΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Sales_data Ρ ΡΠ΅ΠΌ ΠΆΠ΅ ISBN
auto found = equal_range(it->cbegin(), it->cend(),
book, compareIsbn);
if (found.first != found.second) // Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° Π΅ΡΡΡ ΠΏΡΠΎΠ΄Π°ΠΆΠΈ
// Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ ΡΡΠΎΠ³ΠΎ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΉ
ret.push_back(make_tuple(it - files.cbegin(),
found.first, found.second));
}
return ret; // ΠΏΡΡΡ, Π΅ΡΠ»ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΉ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ
}
Π¦ΠΈΠΊΠ» for ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π²Π΅ΠΊΡΠΎΡΠ° files, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΠΌΠΈ ΡΠ²Π»ΡΡΡΡΡ Π²Π΅ΠΊΡΠΎΡΠ°ΠΌΠΈ. Π ΡΠΈΠΊΠ»Π΅ for ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π²ΡΠ·ΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° equal_range(), ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅Π³ΠΎ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ-ΡΠ»Π΅Π½ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 11.3.5). ΠΠ΅ΡΠ²ΡΠ΅ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ equal_range() ΡΠ²Π»ΡΡΡΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ°ΠΌΠΈ, ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡΠΈΠΌΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 10.1). Π’ΡΠ΅ΡΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ β Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΡΠ½ΠΊΡΠΈΡ equal_range() ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ <. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΈΠΏ Sales_data Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° <, ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ compareIsbn() (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 11.2.2).
ΠΠ»Π³ΠΎΡΠΈΡΠΌ equal_range() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΠ°ΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ², ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡΠΈΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². ΠΡΠ»ΠΈ ΠΊΠ½ΠΈΠ³Π° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π½Π°ΠΉΠ΄Π΅Π½Π°, ΡΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ ΠΎΠΊΠ°ΠΆΡΡΡΡ ΡΠ°Π²Π½Ρ, ΠΎΠ·Π½Π°ΡΠ°Ρ, ΡΡΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΏΡΡΡ. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅Π½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Π½ΠΎΠΉ ΠΏΠ°ΡΡ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠΈΡ ΠΏΠ΅ΡΠ²ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ, Π° Π²ΡΠΎΡΠΎΠΉ β ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΠΊΠΎΡΡΠ΅ΠΆΠ°ΠΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π²Π΅ΠΊΡΠΎΡΠ° ΠΌΠ°Π³Π°Π·ΠΈΠ½ΠΎΠ² Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠ΅ΠΉ ΡΡΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ. Π Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠΎΠΎΠ±ΡΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΎΠ±ΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΌΠ° ΠΏΡΠΎΠ΄Π°ΠΆ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π°, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π±ΡΠ»Π° ΡΠ°ΠΊΠ°Ρ ΠΏΡΠΎΠ΄Π°ΠΆΠ°:
void reportResults(istream &in, ostream &os,
const vector<vector<Sales_data>> &files) {
string s; // ΠΈΡΠΊΠΎΠΌΠ°Ρ ΠΊΠ½ΠΈΠ³Π°
while (in >> s) {
auto trans = findBook(files, s);
// ΠΌΠ°Π³Π°Π·ΠΈΠ½, ΠΏΡΠΎΠ΄Π°Π²ΡΠΈΠΉ ΡΡΡ ΠΊΠ½ΠΈΠ³Ρ
if (trans.empty()) {
cout << s << " not found in any stores" << endl;
continue; // ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠ½ΠΈΠ³Ρ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ°
}
for (const auto &store : trans) // Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° Ρ
// ΠΏΡΠΎΠ΄Π°ΠΆΠ΅ΠΉ
// get<n> Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΊΠΎΡΡΠ΅ΠΆΠ° Π² store
os << "store " << get<0>(store) << " sales: "
<< accumulate(get<1>(store), get<2>(store),
Sales_data(s))
<< endl;
}
}
Π¦ΠΈΠΊΠ» while ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΈΡΠ°Π΅Ρ ΠΏΠΎΡΠΎΠΊ istream ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ in, ΡΡΠΎΠ±Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠ½ΠΈΠ³ΠΈ. ΠΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ findBook() ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΡΡΠ½ΠΈΡΡ, ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π»ΠΈ ΡΡΡΠΎΠΊΠ° s, ΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π²Π΅ΠΊΡΠΎΡΡ trans. Π§ΡΠΎΠ±Ρ ΡΠΏΡΠΎΡΡΠΈΡΡ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΈΠΏΠ° trans, ΡΠ²Π»ΡΡΡΠ΅Π³ΠΎΡΡ Π²Π΅ΠΊΡΠΎΡΠΎΠΌ ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ auto.
ΠΡΠ»ΠΈ Π²Π΅ΠΊΡΠΎΡ trans ΠΏΡΡΡ, Π·Π½Π°ΡΠΈΡ, ΠΏΠΎ ΠΊΠ½ΠΈΠ³Π΅ s Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΏΡΠΎΠ΄Π°ΠΆ Π½Π΅ Π±ΡΠ»ΠΎ. Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π²ΠΎΠ·Π²ΡΠ°Ρ ΠΊ ΡΠΈΠΊΠ»Ρ while, ΡΡΠΎΠ±Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠ½ΠΈΠ³Ρ.
Π¦ΠΈΠΊΠ» for ΡΠ²ΡΠΆΠ΅Ρ ΡΡΡΠ»ΠΊΡ store Ρ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ Π²Π΅ΠΊΡΠΎΡΠ° trans. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π²Π΅ΠΊΡΠΎΡΠ° trans Π½Π΅ Π½ΡΠΆΠ½ΠΎ, ΠΎΠ±ΡΡΠ²ΠΈΠΌ ΡΡΡΠ»ΠΊΡ store ΡΡΡΠ»ΠΊΠΎΠΉ Π½Π° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ. ΠΠ»Ρ Π²ΡΠ²ΠΎΠ΄Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ get: get<0> β ΠΈΠ½Π΄Π΅ΠΊΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π°; get<1> β ΠΈΡΠ΅ΡΠ°ΡΠΎΡ Π½Π° ΠΏΠ΅ΡΠ²ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ; get<2> β Π½Π° ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊΠ»Π°ΡΡ Sales_data ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΡΡΠΌΠΌΡ (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 14.3), Π΄Π»Ρ ΡΡΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ accumulate() (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 10.2.1). ΠΠ°ΠΊ ΠΎΡΠΏΡΠ°Π²Π½ΡΡ ΡΠΎΡΠΊΡ ΡΡΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° Sales_data, ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠΌ Sales_data(), ΠΏΠΎΠ»ΡΡΠ°ΡΡΠΈΠΌ ΡΡΡΠΎΠΊΡ (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 7.1.4). ΠΡΠΎΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ-ΡΠ»Π΅Π½ bookNo ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ, Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅-ΡΠ»Π΅Π½Ρ units_sold ΠΈ revenue β Π½ΡΠ»Π΅ΠΌ.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΡ ΡΠ°Π·Π΄Π΅Π»Π° 17.1.2Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 17.4. ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ Π²Π΅ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ findBook().
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 17.5. ΠΠ΅ΡΠ΅ΠΏΠΈΡΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ findBook() ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π»Π° ΠΏΠ°ΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΈ ΠΏΠ°ΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ².
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 17.6. ΠΠ΅ΡΠ΅ΠΏΠΈΡΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ findBook() ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π° ΠΊΠΎΡΡΠ΅ΠΆ ΠΈΠ»ΠΈ ΠΏΠ°ΡΡ.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 17.7. ΠΠ±ΡΡΡΠ½ΠΈΡΠ΅, ΠΊΠ°ΠΊΡΡ Π²Π΅ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ findBook() Π²Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π΅ΡΠ΅ ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 17.8. Π§ΡΠΎ Π±ΡΠ΄Π΅Ρ, Π΅ΡΠ»ΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ΅ΡΡΠ΅Π³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° accumulate() Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΊΠΎΠ΄Π° ΡΡΠΎΠ³ΠΎ ΡΠ°Π·Π΄Π΅Π»Π° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° Sales_data?