Posted By

jajojejeje on 11/28/18


Tagged

lab5BpriorityIterator


Versions (?)

lab5B_priorityIterator


 / Published in: C++
 

lab5B_priorityIterator

  1. #include "pch.h"
  2. #include <iostream>
  3. #include <list>
  4. #include <queue>
  5. #include <fstream>
  6. #include <string>
  7. #include <vector>
  8. #include <functional> //greater
  9. #include <algorithm>
  10.  
  11. using namespace std;
  12. class Mikser;
  13. class FunktorDlugoscWyrazu;
  14. class funktorPorownywanie;
  15. ostream& operator <<(ostream& os, priority_queue<string, vector<string>, FunktorDlugoscWyrazu> kolejka);
  16. list<string> dodajWyrazy(string linia);
  17.  
  18. class FunktorDlugoscWyrazu {
  19. public:
  20. bool operator()(list<string> a, list<string> b);
  21. };
  22.  
  23. class Mikser : public priority_queue<list<string>, vector<list<string>>, FunktorDlugoscWyrazu> {
  24. public:
  25. Mikser() {}
  26. Mikser(string nazwa) { open(nazwa); };
  27. ~Mikser() {
  28. while (!empty()) {
  29. pop();
  30. }
  31. }
  32. void open(string nazwa);
  33. int execute();
  34. void write(string nazwa);
  35. };
  36.  
  37.  
  38. class funktorPorownywanie {
  39. public:
  40. bool operator()(list<string> a);
  41. };
  42. bool FunktorDlugoscWyrazu::operator()(list<string> a, list<string> b) {
  43. if (a.size() < b.size()) {
  44. return true;
  45. }
  46. else {
  47. return false;
  48. }
  49. }
  50.  
  51.  
  52.  
  53. bool funktorPorownywanie::operator()(list<string> a) {
  54. if (a.size() > 6)
  55. return true;
  56. else
  57. return false;
  58. }
  59.  
  60.  
  61.  
  62. //ostream& operator <<(ostream& os, priority_queue<list<string>, vector<list<string>>, FunktorDlugoscWyrazu> kolejka) {
  63. // os << kolejka.size() << ": ";
  64. // while (!kolejka.empty()) {
  65. // os << kolejka.top() << " ";
  66. // kolejka.pop();
  67. // }
  68. // os << endl;
  69. // return os;
  70. //}
  71.  
  72. void Mikser::open(string nazwa) {
  73. //cout << "f" << endl;
  74. fstream plik;
  75. plik.open(nazwa);
  76. string linia;
  77.  
  78. while (getline(plik, linia)) {
  79. if (linia.size() == 0) continue;
  80. list<string> kolejka = dodajWyrazy(linia);
  81. cout << kolejka.size() << endl;
  82. //kolejka.sor
  83. push(kolejka);
  84.  
  85. }
  86. plik.close();
  87. }
  88.  
  89.  
  90.  
  91.  
  92. //bool porownywanie(priority_queue<string,vector<string>, FunktorDlugoscWyrazu> a, priority_queue<string,vector<string>, FunktorDlugoscWyrazu> b) {
  93. // if (a.size() > b.size()) {
  94. // return true;
  95. // }
  96. // else {
  97. // return false;
  98. // }
  99. //}
  100.  
  101. int Mikser::execute() {
  102. list<list<string>> listaList;
  103. for (int i = 0; i < size(); i++) {
  104. list<string> lista = top();
  105. listaList.push_front(lista);
  106. pop();
  107. push(lista);
  108. }
  109. funktorPorownywanie fp;
  110. int ile = count_if(listaList.begin(), listaList.end(), fp);
  111. cout << ile << endl;
  112. return ile;
  113. }
  114.  
  115. //void Mikser::write(string nazwa) {
  116. // ofstream plik;
  117. // plik.open(nazwa);
  118. // for (Mikser::iterator i = begin(); i != end(); i++) {
  119. // plik << (*i);
  120. // }
  121. // //while()
  122. // plik.close();
  123. //}
  124.  
  125. class DlugosciWyrazow {
  126. bool operator()(string a, string b) {
  127. if (a.size() > b.size()) {
  128. return true;
  129. }
  130. else {
  131. return false;
  132. }
  133. }
  134. };
  135.  
  136.  
  137. list<string> dodajWyrazy(string linia) {
  138. //string linia = "Ala ma kota";
  139. //linia.size()==0
  140. string tekst = "";
  141. list<string> kolejka;
  142. for (unsigned int i = 0; i < linia.size(); i++) {
  143. string litera = "a";
  144. litera[0] = linia[i];
  145. if (litera == " ") {
  146. kolejka.push_front(tekst);
  147. tekst = "";
  148. }
  149. else {
  150. tekst.append(litera);
  151. }
  152. }
  153. //kolejka.push(tekst);
  154. return kolejka;
  155. }
  156.  
  157. int main() {
  158.  
  159. Mikser mikser("mistrz.txt");
  160. mikser.execute();
  161. //mikser.write("mistrz2.txt");
  162. /*for (list<priority_queue<string,vector<string>, FunktorDlugoscWyrazu>>::iterator i = mikser.begin(); i != mikser.end(); i++) {
  163. cout << (*i).size() << endl;
  164. cout << (*i) << endl;
  165. while (!(*i).empty()) {
  166. cout << (*i).top() << endl;
  167. (*i).pop();
  168. }
  169. }*/
  170. return 0;
  171. }

Report this snippet  

You need to login to post a comment.