input: Write a python function to implement a priority queue data structure.
  assert pq.insert('apple', 2) is None and pq.items == [('apple', 2)]
  assert pq.insert('banana', 1) is None and pq.items == [('banana', 1), ('apple', 2)]
  assert pq.insert('cherry', 3) is None and pq.items == [('banana', 1), ('apple', 2), ('cherry', 3)]
  assert pq.pop() == 'banana' and pq.items == [('apple', 2), ('cherry', 3)]
  assert pq.peek() == 'apple' and pq.items == [('apple', 2), ('cherry', 3)]
output: class PriorityQueue:
      def __init__(self):
          self.items = []
  
      def insert(self, item, priority):
          self.items.append((item, priority))
          self.items.sort(key=lambda x: x[1])
  
      def pop(self):
          return self.items.pop(0)[0]
  
      def peek(self):
          return self.items[0][0]
  
  # Example usage:
  pq = PriorityQueue()
  assert pq.insert('apple', 2) is None and pq.items == [('apple', 2)]
  assert pq.insert('banana', 1) is None and pq.items == [('banana', 1), ('apple', 2)]
  assert pq.insert('cherry', 3) is None and pq.items == [('banana', 1), ('apple', 2), ('cherry', 3)]
  assert pq.pop() == 'banana' and pq.items == [('apple', 2), ('cherry', 3)]
  assert pq.peek() == 'apple' and pq.items == [('apple', 2), ('cherry', 3)]